1*b1cdbd2cSJim Jagielski /************************************************************** 2*b1cdbd2cSJim Jagielski * 3*b1cdbd2cSJim Jagielski * Licensed to the Apache Software Foundation (ASF) under one 4*b1cdbd2cSJim Jagielski * or more contributor license agreements. See the NOTICE file 5*b1cdbd2cSJim Jagielski * distributed with this work for additional information 6*b1cdbd2cSJim Jagielski * regarding copyright ownership. The ASF licenses this file 7*b1cdbd2cSJim Jagielski * to you under the Apache License, Version 2.0 (the 8*b1cdbd2cSJim Jagielski * "License"); you may not use this file except in compliance 9*b1cdbd2cSJim Jagielski * with the License. You may obtain a copy of the License at 10*b1cdbd2cSJim Jagielski * 11*b1cdbd2cSJim Jagielski * http://www.apache.org/licenses/LICENSE-2.0 12*b1cdbd2cSJim Jagielski * 13*b1cdbd2cSJim Jagielski * Unless required by applicable law or agreed to in writing, 14*b1cdbd2cSJim Jagielski * software distributed under the License is distributed on an 15*b1cdbd2cSJim Jagielski * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*b1cdbd2cSJim Jagielski * KIND, either express or implied. See the License for the 17*b1cdbd2cSJim Jagielski * specific language governing permissions and limitations 18*b1cdbd2cSJim Jagielski * under the License. 19*b1cdbd2cSJim Jagielski * 20*b1cdbd2cSJim Jagielski *************************************************************/ 21*b1cdbd2cSJim Jagielski 22*b1cdbd2cSJim Jagielski 23*b1cdbd2cSJim Jagielski package fvt.uno.sc.cell; 24*b1cdbd2cSJim Jagielski 25*b1cdbd2cSJim Jagielski import static org.junit.Assert.assertEquals; 26*b1cdbd2cSJim Jagielski import static org.junit.Assert.assertFalse; 27*b1cdbd2cSJim Jagielski import static org.junit.Assert.assertTrue; 28*b1cdbd2cSJim Jagielski 29*b1cdbd2cSJim Jagielski import java.util.Arrays; 30*b1cdbd2cSJim Jagielski import java.util.Collection; 31*b1cdbd2cSJim Jagielski 32*b1cdbd2cSJim Jagielski import org.junit.After; 33*b1cdbd2cSJim Jagielski import org.junit.AfterClass; 34*b1cdbd2cSJim Jagielski import org.junit.Before; 35*b1cdbd2cSJim Jagielski import org.junit.BeforeClass; 36*b1cdbd2cSJim Jagielski import org.junit.Test; 37*b1cdbd2cSJim Jagielski import org.junit.runner.RunWith; 38*b1cdbd2cSJim Jagielski import org.junit.runners.Parameterized; 39*b1cdbd2cSJim Jagielski import org.junit.runners.Parameterized.Parameters; 40*b1cdbd2cSJim Jagielski import org.openoffice.test.uno.UnoApp; 41*b1cdbd2cSJim Jagielski 42*b1cdbd2cSJim Jagielski import testlib.uno.SCUtil; 43*b1cdbd2cSJim Jagielski import testlib.uno.TestUtil; 44*b1cdbd2cSJim Jagielski import testlib.uno.CellInfo; 45*b1cdbd2cSJim Jagielski 46*b1cdbd2cSJim Jagielski import com.sun.star.lang.XComponent; 47*b1cdbd2cSJim Jagielski import com.sun.star.sheet.XSpreadsheet; 48*b1cdbd2cSJim Jagielski import com.sun.star.sheet.XSpreadsheetDocument; 49*b1cdbd2cSJim Jagielski import com.sun.star.table.XCell; 50*b1cdbd2cSJim Jagielski 51*b1cdbd2cSJim Jagielski 52*b1cdbd2cSJim Jagielski /** 53*b1cdbd2cSJim Jagielski * Check the cell background color and font color setting can be applied and saved 54*b1cdbd2cSJim Jagielski * 55*b1cdbd2cSJim Jagielski */ 56*b1cdbd2cSJim Jagielski @RunWith(value = Parameterized.class) 57*b1cdbd2cSJim Jagielski public class CellEffectUnderline { 58*b1cdbd2cSJim Jagielski 59*b1cdbd2cSJim Jagielski private int expectedLine; 60*b1cdbd2cSJim Jagielski private int expectedColor; 61*b1cdbd2cSJim Jagielski private String[] inputType; 62*b1cdbd2cSJim Jagielski private int inputStyle; 63*b1cdbd2cSJim Jagielski private int inputColor; 64*b1cdbd2cSJim Jagielski private String fileType; 65*b1cdbd2cSJim Jagielski 66*b1cdbd2cSJim Jagielski private static final UnoApp unoApp = new UnoApp(); 67*b1cdbd2cSJim Jagielski 68*b1cdbd2cSJim Jagielski XComponent scComponent = null; 69*b1cdbd2cSJim Jagielski XSpreadsheetDocument scDocument = null; 70*b1cdbd2cSJim Jagielski 71*b1cdbd2cSJim Jagielski @Parameters data()72*b1cdbd2cSJim Jagielski public static Collection<Object[]> data() throws Exception { 73*b1cdbd2cSJim Jagielski String[] typeList = {"CharUnderline", "CharUnderlineHasColor", "CharUnderlineColor"}; 74*b1cdbd2cSJim Jagielski int[] list = TestUtil.randColorList(19); 75*b1cdbd2cSJim Jagielski return Arrays.asList(new Object[][] { 76*b1cdbd2cSJim Jagielski {0, list[0], typeList, 0, list[0], "ods"}, //NONE 0 77*b1cdbd2cSJim Jagielski {1, list[1], typeList, 1, list[1], "ods"}, //SIGNLE 1 78*b1cdbd2cSJim Jagielski {2, list[2], typeList, 2, list[2], "ods"}, //DOUBLE 2 79*b1cdbd2cSJim Jagielski {3, list[3], typeList, 3, list[3], "ods"}, //DOTTED 3 80*b1cdbd2cSJim Jagielski {0, list[4], typeList, 4, list[4], "ods"}, //DONTKNOW 4 can not set this setting via UI 81*b1cdbd2cSJim Jagielski {5, list[5], typeList, 5, list[5], "ods"}, //DASH 5 82*b1cdbd2cSJim Jagielski {6, list[6], typeList, 6, list[6], "ods"}, //LONGDASH 6 83*b1cdbd2cSJim Jagielski {7, list[7], typeList, 7, list[7], "ods"}, //DASHDOT 7 84*b1cdbd2cSJim Jagielski {8, list[8], typeList, 8, list[8], "ods"}, //DASHDOTDOT 8 85*b1cdbd2cSJim Jagielski {9, list[9], typeList, 9, list[9], "ods"}, //SMALLWAVE 9 can not set this setting via UI 86*b1cdbd2cSJim Jagielski {10, list[10], typeList, 10, list[10], "ods"}, //WAVE 10 87*b1cdbd2cSJim Jagielski {11, list[11], typeList, 11, list[11], "ods"}, //DOUBLEWAVE 11 88*b1cdbd2cSJim Jagielski {12, list[12], typeList, 12, list[12], "ods"}, //BOLD 12 89*b1cdbd2cSJim Jagielski {13, list[13], typeList, 13, list[13], "ods"}, //BOLDDOTTED 13 90*b1cdbd2cSJim Jagielski {14, list[14], typeList, 14, list[14], "ods"}, //BOLDDASH 14 91*b1cdbd2cSJim Jagielski {15, list[15], typeList, 15, list[15], "ods"}, //BOLDLONGDASH 15 92*b1cdbd2cSJim Jagielski {16, list[16], typeList, 16, list[16], "ods"}, //BOLDDASHDOT 16 93*b1cdbd2cSJim Jagielski {17, list[17], typeList, 17, list[17], "ods"}, //BOLDDASHDOTDOT 17 94*b1cdbd2cSJim Jagielski {18, list[18], typeList, 18, list[18], "ods"}, //BOLDWAVE = 18 95*b1cdbd2cSJim Jagielski 96*b1cdbd2cSJim Jagielski {0, list[0], typeList, 0, list[0], "xls"}, //NONE 0 97*b1cdbd2cSJim Jagielski {1, list[1], typeList, 1, list[1], "xls"}, //SIGNLE 1 98*b1cdbd2cSJim Jagielski {2, list[2], typeList, 2, list[2], "xls"}, //DOUBLE 2 99*b1cdbd2cSJim Jagielski {1, list[3], typeList, 3, list[3], "xls"}, //DOTTED 3 100*b1cdbd2cSJim Jagielski {0, list[4], typeList, 4, list[4], "xls"}, //DONTKNOW 4 can not set this setting via UI 101*b1cdbd2cSJim Jagielski {1, list[5], typeList, 5, list[5], "xls"}, //DASH 5 102*b1cdbd2cSJim Jagielski {1, list[6], typeList, 6, list[6], "xls"}, //LONGDASH 6 103*b1cdbd2cSJim Jagielski {1, list[7], typeList, 7, list[7], "xls"}, //DASHDOT 7 104*b1cdbd2cSJim Jagielski {1, list[8], typeList, 8, list[8], "xls"}, //DASHDOTDOT 8 105*b1cdbd2cSJim Jagielski {1, list[9], typeList, 9, list[9], "xls"}, //SMALLWAVE 9 can not set this setting via UI 106*b1cdbd2cSJim Jagielski {1, list[10], typeList, 10, list[10], "xls"}, //WAVE 10 107*b1cdbd2cSJim Jagielski {2, list[11], typeList, 11, list[11], "xls"}, //DOUBLEWAVE 11 108*b1cdbd2cSJim Jagielski {1, list[12], typeList, 12, list[12], "xls"}, //BOLD 12 109*b1cdbd2cSJim Jagielski {1, list[13], typeList, 13, list[13], "xls"}, //BOLDDOTTED 13 110*b1cdbd2cSJim Jagielski {1, list[14], typeList, 14, list[14], "xls"}, //BOLDDASH 14 111*b1cdbd2cSJim Jagielski {1, list[15], typeList, 15, list[15], "xls"}, //BOLDLONGDASH 15 112*b1cdbd2cSJim Jagielski {1, list[16], typeList, 16, list[16], "xls"}, //BOLDDASHDOT 16 113*b1cdbd2cSJim Jagielski {1, list[17], typeList, 17, list[17], "xls"}, //BOLDDASHDOTDOT 17 114*b1cdbd2cSJim Jagielski {1, list[18], typeList, 18, list[18], "xls"} //BOLDWAVE = 18 115*b1cdbd2cSJim Jagielski }); 116*b1cdbd2cSJim Jagielski } 117*b1cdbd2cSJim Jagielski CellEffectUnderline(int expectedStyle, int expectedColor, String[] inputType, int inputStyle, int inputColor, String fileType)118*b1cdbd2cSJim Jagielski public CellEffectUnderline(int expectedStyle, int expectedColor, String[] inputType, int inputStyle, int inputColor, String fileType) { 119*b1cdbd2cSJim Jagielski this.expectedLine = expectedStyle; 120*b1cdbd2cSJim Jagielski this.expectedColor = expectedColor; 121*b1cdbd2cSJim Jagielski this.inputType = inputType; 122*b1cdbd2cSJim Jagielski this.inputStyle = inputStyle; 123*b1cdbd2cSJim Jagielski this.inputColor = inputColor; 124*b1cdbd2cSJim Jagielski this.fileType = fileType; 125*b1cdbd2cSJim Jagielski } 126*b1cdbd2cSJim Jagielski 127*b1cdbd2cSJim Jagielski 128*b1cdbd2cSJim Jagielski @Before setUp()129*b1cdbd2cSJim Jagielski public void setUp() throws Exception { 130*b1cdbd2cSJim Jagielski scComponent = unoApp.newDocument("scalc"); 131*b1cdbd2cSJim Jagielski scDocument = SCUtil.getSCDocument(scComponent); 132*b1cdbd2cSJim Jagielski } 133*b1cdbd2cSJim Jagielski 134*b1cdbd2cSJim Jagielski @After tearDown()135*b1cdbd2cSJim Jagielski public void tearDown() throws Exception { 136*b1cdbd2cSJim Jagielski unoApp.closeDocument(scComponent); 137*b1cdbd2cSJim Jagielski 138*b1cdbd2cSJim Jagielski } 139*b1cdbd2cSJim Jagielski 140*b1cdbd2cSJim Jagielski @BeforeClass setUpConnection()141*b1cdbd2cSJim Jagielski public static void setUpConnection() throws Exception { 142*b1cdbd2cSJim Jagielski unoApp.start(); 143*b1cdbd2cSJim Jagielski } 144*b1cdbd2cSJim Jagielski 145*b1cdbd2cSJim Jagielski @AfterClass tearDownConnection()146*b1cdbd2cSJim Jagielski public static void tearDownConnection() throws InterruptedException, Exception { 147*b1cdbd2cSJim Jagielski unoApp.close(); 148*b1cdbd2cSJim Jagielski SCUtil.clearTempDir(); 149*b1cdbd2cSJim Jagielski } 150*b1cdbd2cSJim Jagielski 151*b1cdbd2cSJim Jagielski /** 152*b1cdbd2cSJim Jagielski * Check the cell underline style and underline color 153*b1cdbd2cSJim Jagielski * 1. Create a spreadsheet file. 154*b1cdbd2cSJim Jagielski * 2. Input number, text, formula into many cell. 155*b1cdbd2cSJim Jagielski * 3. Set cell underline style. 156*b1cdbd2cSJim Jagielski * 4. Set cell underline color, if underline style is not NONE. 157*b1cdbd2cSJim Jagielski * 4. Save file as ODF/MSBinary format. 158*b1cdbd2cSJim Jagielski * 5. Close and reopen file. -> Check the underline style and underline color setting. 159*b1cdbd2cSJim Jagielski * @throws Exception 160*b1cdbd2cSJim Jagielski */ 161*b1cdbd2cSJim Jagielski @Test testCharUnderline()162*b1cdbd2cSJim Jagielski public void testCharUnderline() throws Exception { 163*b1cdbd2cSJim Jagielski String fileName = "testCharUnderline"; 164*b1cdbd2cSJim Jagielski int cellNum = 5; 165*b1cdbd2cSJim Jagielski XCell[] cells = new XCell[cellNum]; 166*b1cdbd2cSJim Jagielski int[] styleResults = new int[cellNum]; 167*b1cdbd2cSJim Jagielski boolean[] hasColor = new boolean[cellNum]; 168*b1cdbd2cSJim Jagielski int[] colorResults = new int[cellNum]; 169*b1cdbd2cSJim Jagielski CellInfo cInfo = TestUtil.randCell(100, 32768); 170*b1cdbd2cSJim Jagielski 171*b1cdbd2cSJim Jagielski XSpreadsheet sheet = SCUtil.getCurrentSheet(scDocument); 172*b1cdbd2cSJim Jagielski 173*b1cdbd2cSJim Jagielski for (int i = 0; i < cellNum; i++) { 174*b1cdbd2cSJim Jagielski cells[i] = sheet.getCellByPosition(cInfo.getCol(), cInfo.getRow() + i); 175*b1cdbd2cSJim Jagielski } 176*b1cdbd2cSJim Jagielski 177*b1cdbd2cSJim Jagielski cells[0].setValue(inputColor); 178*b1cdbd2cSJim Jagielski SCUtil.setTextToCell(cells[1], inputType[0]); 179*b1cdbd2cSJim Jagielski cells[2].setFormula("=\"ABC\""); 180*b1cdbd2cSJim Jagielski cells[3].setValue(-0.90000001); 181*b1cdbd2cSJim Jagielski 182*b1cdbd2cSJim Jagielski for (int i = 0; i < cellNum; i++) { 183*b1cdbd2cSJim Jagielski SCUtil.setCellProperties(cells[i], inputType[0], inputStyle); 184*b1cdbd2cSJim Jagielski if (inputStyle > 0) { 185*b1cdbd2cSJim Jagielski SCUtil.setCellProperties(cells[i], inputType[1], true); 186*b1cdbd2cSJim Jagielski SCUtil.setCellProperties(cells[i], inputType[2], inputColor); 187*b1cdbd2cSJim Jagielski } 188*b1cdbd2cSJim Jagielski } 189*b1cdbd2cSJim Jagielski 190*b1cdbd2cSJim Jagielski SCUtil.saveFileAs(scComponent, fileName, fileType); 191*b1cdbd2cSJim Jagielski scDocument = SCUtil.reloadFile(unoApp, scDocument, fileName + "." + fileType); 192*b1cdbd2cSJim Jagielski sheet = SCUtil.getCurrentSheet(scDocument); 193*b1cdbd2cSJim Jagielski 194*b1cdbd2cSJim Jagielski for (int i = 0; i < cellNum; i++) { 195*b1cdbd2cSJim Jagielski cells[i] = sheet.getCellByPosition(cInfo.getCol(), cInfo.getRow() + i); 196*b1cdbd2cSJim Jagielski styleResults[i] = ((Short) SCUtil.getCellProperties(cells[i], inputType[0])).shortValue(); 197*b1cdbd2cSJim Jagielski if (inputStyle > 0) { 198*b1cdbd2cSJim Jagielski hasColor[i] = ((Boolean) SCUtil.getCellProperties(cells[i], inputType[1])).booleanValue(); 199*b1cdbd2cSJim Jagielski colorResults[i] = ((Integer) SCUtil.getCellProperties(cells[i], inputType[2])).intValue(); 200*b1cdbd2cSJim Jagielski } 201*b1cdbd2cSJim Jagielski } 202*b1cdbd2cSJim Jagielski SCUtil.closeFile(scDocument); 203*b1cdbd2cSJim Jagielski 204*b1cdbd2cSJim Jagielski for (int i = 0; i < cellNum; i++) { 205*b1cdbd2cSJim Jagielski assertEquals("Incorrect cell underline style(" + inputType[0] + ") value got in ." + fileType + " file.", expectedLine, styleResults[i], 0); 206*b1cdbd2cSJim Jagielski if (inputStyle > 0) { 207*b1cdbd2cSJim Jagielski if( fileType.equalsIgnoreCase("xls") || fileType.equalsIgnoreCase("xlt")) { 208*b1cdbd2cSJim Jagielski assertFalse("Incorrect cell underline has color setting(" + inputType[1] + ") value got in ." + fileType + " file.", hasColor[i]); 209*b1cdbd2cSJim Jagielski } 210*b1cdbd2cSJim Jagielski else { 211*b1cdbd2cSJim Jagielski assertTrue("Incorrect cell underline has color setting(" + inputType[1] + ") value got in ." + fileType + " file.", hasColor[i]); 212*b1cdbd2cSJim Jagielski assertEquals("Incorrect cell underline color(" + inputType[2] + ") value got in ." + fileType + " file.", expectedColor, colorResults[i], 0); 213*b1cdbd2cSJim Jagielski } 214*b1cdbd2cSJim Jagielski 215*b1cdbd2cSJim Jagielski } 216*b1cdbd2cSJim Jagielski } 217*b1cdbd2cSJim Jagielski 218*b1cdbd2cSJim Jagielski } 219*b1cdbd2cSJim Jagielski 220*b1cdbd2cSJim Jagielski } 221