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