1*eba4d44aSLiu Zhe /************************************************************** 2*eba4d44aSLiu Zhe * 3*eba4d44aSLiu Zhe * Licensed to the Apache Software Foundation (ASF) under one 4*eba4d44aSLiu Zhe * or more contributor license agreements. See the NOTICE file 5*eba4d44aSLiu Zhe * distributed with this work for additional information 6*eba4d44aSLiu Zhe * regarding copyright ownership. The ASF licenses this file 7*eba4d44aSLiu Zhe * to you under the Apache License, Version 2.0 (the 8*eba4d44aSLiu Zhe * "License"); you may not use this file except in compliance 9*eba4d44aSLiu Zhe * with the License. You may obtain a copy of the License at 10*eba4d44aSLiu Zhe * 11*eba4d44aSLiu Zhe * http://www.apache.org/licenses/LICENSE-2.0 12*eba4d44aSLiu Zhe * 13*eba4d44aSLiu Zhe * Unless required by applicable law or agreed to in writing, 14*eba4d44aSLiu Zhe * software distributed under the License is distributed on an 15*eba4d44aSLiu Zhe * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*eba4d44aSLiu Zhe * KIND, either express or implied. See the License for the 17*eba4d44aSLiu Zhe * specific language governing permissions and limitations 18*eba4d44aSLiu Zhe * under the License. 19*eba4d44aSLiu Zhe * 20*eba4d44aSLiu Zhe *************************************************************/ 21*eba4d44aSLiu Zhe 22*eba4d44aSLiu Zhe 23*eba4d44aSLiu Zhe package fvt.uno.sc.cell; 24*eba4d44aSLiu Zhe 25*eba4d44aSLiu Zhe import static org.junit.Assert.assertEquals; 26*eba4d44aSLiu Zhe 27*eba4d44aSLiu Zhe import java.util.Arrays; 28*eba4d44aSLiu Zhe import java.util.Collection; 29*eba4d44aSLiu Zhe 30*eba4d44aSLiu Zhe import org.junit.After; 31*eba4d44aSLiu Zhe import org.junit.AfterClass; 32*eba4d44aSLiu Zhe import org.junit.Before; 33*eba4d44aSLiu Zhe import org.junit.BeforeClass; 34*eba4d44aSLiu Zhe import org.junit.Test; 35*eba4d44aSLiu Zhe import org.junit.runner.RunWith; 36*eba4d44aSLiu Zhe import org.junit.runners.Parameterized; 37*eba4d44aSLiu Zhe import org.junit.runners.Parameterized.Parameters; 38*eba4d44aSLiu Zhe import org.openoffice.test.uno.UnoApp; 39*eba4d44aSLiu Zhe 40*eba4d44aSLiu Zhe import testlib.uno.SCUtil; 41*eba4d44aSLiu Zhe import testlib.uno.TestUtil; 42*eba4d44aSLiu Zhe import testlib.uno.CellInfo; 43*eba4d44aSLiu Zhe 44*eba4d44aSLiu Zhe import com.sun.star.lang.XComponent; 45*eba4d44aSLiu Zhe import com.sun.star.sheet.XSpreadsheet; 46*eba4d44aSLiu Zhe import com.sun.star.sheet.XSpreadsheetDocument; 47*eba4d44aSLiu Zhe import com.sun.star.table.BorderLine; 48*eba4d44aSLiu Zhe import com.sun.star.table.XCell; 49*eba4d44aSLiu Zhe 50*eba4d44aSLiu Zhe 51*eba4d44aSLiu Zhe /** 52*eba4d44aSLiu Zhe * Check the cell border setting can be applied and saved 53*eba4d44aSLiu Zhe * 54*eba4d44aSLiu Zhe */ 55*eba4d44aSLiu Zhe @RunWith(value = Parameterized.class) 56*eba4d44aSLiu Zhe public class CellBorder { 57*eba4d44aSLiu Zhe //create a class to implement Equals method for BorderLine 58*eba4d44aSLiu Zhe private class BorderLineWithEqualsFunction{ 59*eba4d44aSLiu Zhe private int Color; 60*eba4d44aSLiu Zhe private short InnerLineWidth; 61*eba4d44aSLiu Zhe private short LineDistance; 62*eba4d44aSLiu Zhe private short OuterLineWidth; 63*eba4d44aSLiu Zhe BorderLineWithEqualsFunction(BorderLine borderLine)64*eba4d44aSLiu Zhe public BorderLineWithEqualsFunction(BorderLine borderLine) { 65*eba4d44aSLiu Zhe this.Color = borderLine.Color; 66*eba4d44aSLiu Zhe this.InnerLineWidth = borderLine.InnerLineWidth; 67*eba4d44aSLiu Zhe this.LineDistance = borderLine.LineDistance; 68*eba4d44aSLiu Zhe this.OuterLineWidth = borderLine.OuterLineWidth; 69*eba4d44aSLiu Zhe } 70*eba4d44aSLiu Zhe equals(Object obj)71*eba4d44aSLiu Zhe public boolean equals(Object obj) { 72*eba4d44aSLiu Zhe if (!(obj instanceof BorderLineWithEqualsFunction)) { 73*eba4d44aSLiu Zhe return false; 74*eba4d44aSLiu Zhe } 75*eba4d44aSLiu Zhe BorderLineWithEqualsFunction borderLine = (BorderLineWithEqualsFunction) obj; 76*eba4d44aSLiu Zhe return this.Color == borderLine.Color 77*eba4d44aSLiu Zhe && this.InnerLineWidth == borderLine.InnerLineWidth 78*eba4d44aSLiu Zhe && this.LineDistance == borderLine.LineDistance 79*eba4d44aSLiu Zhe && this.OuterLineWidth == borderLine.OuterLineWidth; 80*eba4d44aSLiu Zhe } 81*eba4d44aSLiu Zhe hashCode()82*eba4d44aSLiu Zhe public int hashCode() { 83*eba4d44aSLiu Zhe int result = 17; 84*eba4d44aSLiu Zhe result = 37 * result + (int) this.Color; 85*eba4d44aSLiu Zhe result = 37 * result + (short) this.InnerLineWidth; 86*eba4d44aSLiu Zhe result = 37 * result + (short) this.LineDistance; 87*eba4d44aSLiu Zhe result = 37 * result + (short) this.OuterLineWidth; 88*eba4d44aSLiu Zhe return result; 89*eba4d44aSLiu Zhe } 90*eba4d44aSLiu Zhe } 91*eba4d44aSLiu Zhe 92*eba4d44aSLiu Zhe private BorderLine expected; 93*eba4d44aSLiu Zhe private BorderLine borderLine; 94*eba4d44aSLiu Zhe private String fileType; 95*eba4d44aSLiu Zhe 96*eba4d44aSLiu Zhe private static final UnoApp unoApp = new UnoApp(); 97*eba4d44aSLiu Zhe 98*eba4d44aSLiu Zhe XComponent scComponent = null; 99*eba4d44aSLiu Zhe XSpreadsheetDocument scDocument = null; 100*eba4d44aSLiu Zhe 101*eba4d44aSLiu Zhe @Parameters data()102*eba4d44aSLiu Zhe public static Collection<Object[]> data() throws Exception { 103*eba4d44aSLiu Zhe int[] colorList = TestUtil.randColorList(3); 104*eba4d44aSLiu Zhe 105*eba4d44aSLiu Zhe return Arrays.asList(new Object[][] { 106*eba4d44aSLiu Zhe //{inner line (pt), distance (pt), outer line (pt), color number, inner line (pt), distance (pt), outer line (pt), file type} 107*eba4d44aSLiu Zhe {0, 0, 1, 0xFF0000, 0, 0, 1, "ods"}, 108*eba4d44aSLiu Zhe {0, 0, 0.5, 0x00FF00, 0, 0, 0.5, "ods"}, 109*eba4d44aSLiu Zhe {0, 0, 2.5, 0x0000FF, 0, 0, 2.5, "ods"}, 110*eba4d44aSLiu Zhe {0, 0, 5, 0x0000FF, 0, 0, 5, "ods"}, 111*eba4d44aSLiu Zhe {0.05, 0.05, 0.05, colorList[0], 0.05, 0.05, 0.05, "ods"}, 112*eba4d44aSLiu Zhe {1.0, 0.5, 1.0, colorList[1], 1.0, 0.5, 1.0, "ods"}, 113*eba4d44aSLiu Zhe {5, 2, 5, colorList[2], 5, 2, 5, "ods"}, 114*eba4d44aSLiu Zhe {0, 0, 4, 0xFF0000, 0, 0, 5, "xls"}, 115*eba4d44aSLiu Zhe {0, 0, 2.5, 0xFFFF00, 0, 0, 2, "xls"}, 116*eba4d44aSLiu Zhe {0, 0, 1, 0x00FF00, 0, 0, 0.5, "xls"}, 117*eba4d44aSLiu Zhe {1, 1, 1, 0x0000FF, 0.5, 1.0, 0.5, "xls"} 118*eba4d44aSLiu Zhe 119*eba4d44aSLiu Zhe }); 120*eba4d44aSLiu Zhe } 121*eba4d44aSLiu Zhe CellBorder(double expInnerLineWidth, double expLineDistance, double expOuterLineWidth, int color, double innerLineWidth, double lineDistance, double outerLineWidth, String fileType)122*eba4d44aSLiu Zhe public CellBorder(double expInnerLineWidth, double expLineDistance, double expOuterLineWidth, int color, double innerLineWidth, double lineDistance, double outerLineWidth, String fileType) { 123*eba4d44aSLiu Zhe BorderLine eBorderLine = new BorderLine(); 124*eba4d44aSLiu Zhe BorderLine aBorderLine = new BorderLine(); 125*eba4d44aSLiu Zhe 126*eba4d44aSLiu Zhe eBorderLine.Color = color; 127*eba4d44aSLiu Zhe eBorderLine.InnerLineWidth = (short) Math.round(2540 / 72.0 * expInnerLineWidth); 128*eba4d44aSLiu Zhe eBorderLine.LineDistance = (short) Math.round(2540 / 72.0 * expLineDistance); 129*eba4d44aSLiu Zhe eBorderLine.OuterLineWidth = (short) Math.round(2540 / 72.0 * expOuterLineWidth); 130*eba4d44aSLiu Zhe 131*eba4d44aSLiu Zhe aBorderLine.Color = color; 132*eba4d44aSLiu Zhe aBorderLine.InnerLineWidth = (short) Math.round(2540 / 72.0 * innerLineWidth); 133*eba4d44aSLiu Zhe aBorderLine.LineDistance = (short) Math.round(2540 / 72.0 * lineDistance); 134*eba4d44aSLiu Zhe aBorderLine.OuterLineWidth = (short) Math.round(2540 / 72.0 * outerLineWidth); 135*eba4d44aSLiu Zhe 136*eba4d44aSLiu Zhe this.expected = eBorderLine; 137*eba4d44aSLiu Zhe this.borderLine = aBorderLine; 138*eba4d44aSLiu Zhe this.fileType = fileType; 139*eba4d44aSLiu Zhe } 140*eba4d44aSLiu Zhe 141*eba4d44aSLiu Zhe 142*eba4d44aSLiu Zhe @Before setUp()143*eba4d44aSLiu Zhe public void setUp() throws Exception { 144*eba4d44aSLiu Zhe scComponent = unoApp.newDocument("scalc"); 145*eba4d44aSLiu Zhe scDocument = SCUtil.getSCDocument(scComponent); 146*eba4d44aSLiu Zhe } 147*eba4d44aSLiu Zhe 148*eba4d44aSLiu Zhe @After tearDown()149*eba4d44aSLiu Zhe public void tearDown() throws Exception { 150*eba4d44aSLiu Zhe unoApp.closeDocument(scComponent); 151*eba4d44aSLiu Zhe 152*eba4d44aSLiu Zhe } 153*eba4d44aSLiu Zhe 154*eba4d44aSLiu Zhe @BeforeClass setUpConnection()155*eba4d44aSLiu Zhe public static void setUpConnection() throws Exception { 156*eba4d44aSLiu Zhe unoApp.start(); 157*eba4d44aSLiu Zhe } 158*eba4d44aSLiu Zhe 159*eba4d44aSLiu Zhe @AfterClass tearDownConnection()160*eba4d44aSLiu Zhe public static void tearDownConnection() throws InterruptedException, Exception { 161*eba4d44aSLiu Zhe unoApp.close(); 162*eba4d44aSLiu Zhe SCUtil.clearTempDir(); 163*eba4d44aSLiu Zhe } 164*eba4d44aSLiu Zhe 165*eba4d44aSLiu Zhe /** 166*eba4d44aSLiu Zhe * Check the cell border settings 167*eba4d44aSLiu Zhe * 1. Create a spreadsheet file. 168*eba4d44aSLiu Zhe * 2. Input number, text, formula into many cell. 169*eba4d44aSLiu Zhe * 3. Set cell border properties. 170*eba4d44aSLiu Zhe * 4. Save file as ODF/MSBinary format. 171*eba4d44aSLiu Zhe * 5. Close and reopen file. -> Check the border setting. 172*eba4d44aSLiu Zhe * @throws Exception 173*eba4d44aSLiu Zhe */ 174*eba4d44aSLiu Zhe @Test testCellBorder()175*eba4d44aSLiu Zhe public void testCellBorder() throws Exception { 176*eba4d44aSLiu Zhe String fileName = "testCellBorder"; 177*eba4d44aSLiu Zhe String[] borderType = {"LeftBorder", "RightBorder", "TopBorder", "BottomBorder"}; 178*eba4d44aSLiu Zhe int borderNum = borderType.length; 179*eba4d44aSLiu Zhe int cellNum = 10; 180*eba4d44aSLiu Zhe XCell[] cells = new XCell[cellNum]; 181*eba4d44aSLiu Zhe BorderLine[][] results = new BorderLine[cellNum][borderNum]; 182*eba4d44aSLiu Zhe CellInfo cInfo = TestUtil.randCell(10, 10); 183*eba4d44aSLiu Zhe 184*eba4d44aSLiu Zhe XSpreadsheet sheet = SCUtil.getCurrentSheet(scDocument); 185*eba4d44aSLiu Zhe 186*eba4d44aSLiu Zhe for (int i = 0; i < cellNum; i++) { 187*eba4d44aSLiu Zhe cells[i] = sheet.getCellByPosition(cInfo.getCol(), cInfo.getRow() + i); 188*eba4d44aSLiu Zhe } 189*eba4d44aSLiu Zhe 190*eba4d44aSLiu Zhe cells[0].setValue(borderLine.Color); 191*eba4d44aSLiu Zhe SCUtil. setTextToCell(cells[1], "all border"); 192*eba4d44aSLiu Zhe cells[2].setFormula("=2^6"); 193*eba4d44aSLiu Zhe cells[3].setValue(-0.1); 194*eba4d44aSLiu Zhe 195*eba4d44aSLiu Zhe for (int i = 0; i < cellNum; i++) { 196*eba4d44aSLiu Zhe for (int j = 0; j < borderNum; j++) { 197*eba4d44aSLiu Zhe SCUtil.setCellProperties(cells[i], borderType[j], borderLine); 198*eba4d44aSLiu Zhe } 199*eba4d44aSLiu Zhe } 200*eba4d44aSLiu Zhe 201*eba4d44aSLiu Zhe SCUtil.saveFileAs(scComponent, fileName, fileType); 202*eba4d44aSLiu Zhe scDocument = SCUtil.reloadFile(unoApp, scDocument, fileName + "." + fileType); 203*eba4d44aSLiu Zhe sheet = SCUtil.getCurrentSheet(scDocument); 204*eba4d44aSLiu Zhe 205*eba4d44aSLiu Zhe for (int i = 0; i < cellNum; i++) { 206*eba4d44aSLiu Zhe cells[i] = sheet.getCellByPosition(cInfo.getCol(), cInfo.getRow() + i); 207*eba4d44aSLiu Zhe for (int j = 0; j < borderNum; j++) { 208*eba4d44aSLiu Zhe results[i][j] = (BorderLine) SCUtil.getCellProperties(cells[i], borderType[j]); 209*eba4d44aSLiu Zhe } 210*eba4d44aSLiu Zhe } 211*eba4d44aSLiu Zhe 212*eba4d44aSLiu Zhe SCUtil.closeFile(scDocument); 213*eba4d44aSLiu Zhe 214*eba4d44aSLiu Zhe for (int i = 0; i< cellNum; i++){ 215*eba4d44aSLiu Zhe for (int j = 0; j<borderNum; j++) { 216*eba4d44aSLiu Zhe assertEquals("Incorrect cell border(" + borderType[j] + ") value got in ." + fileType + " file.", 217*eba4d44aSLiu Zhe new BorderLineWithEqualsFunction(expected), new BorderLineWithEqualsFunction(results[i][j])); 218*eba4d44aSLiu Zhe } 219*eba4d44aSLiu Zhe } 220*eba4d44aSLiu Zhe 221*eba4d44aSLiu Zhe } 222*eba4d44aSLiu Zhe 223*eba4d44aSLiu Zhe } 224