xref: /AOO41X/test/testuno/source/fvt/uno/sc/cell/CellBorder.java (revision 83137a03adbb58b5b3bdafefefa1e93de35e0011)
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