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