1 /*************************************************************************
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
5 * Copyright 2000, 2010 Oracle and/or its affiliates.
7 * OpenOffice.org - a multi-platform office productivity suite
9 * This file is part of OpenOffice.org.
11 * OpenOffice.org is free software: you can redistribute it and/or modify
12 * it under the terms of the GNU Lesser General Public License version 3
13 * only, as published by the Free Software Foundation.
15 * OpenOffice.org is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 * GNU Lesser General Public License version 3 for more details
19 * (a copy is included in the LICENSE file that accompanied this code).
21 * You should have received a copy of the GNU Lesser General Public License
22 * version 3 along with OpenOffice.org. If not, see
23 * <http://www.openoffice.org/license.html>
24 * for a copy of the LGPLv3 License.
26 ************************************************************************/
30 import lib
.MultiMethodTest
;
32 import lib
.StatusException
;
34 import com
.sun
.star
.table
.XCell
;
35 import com
.sun
.star
.table
.XCellRange
;
36 import com
.sun
.star
.table
.XTableColumns
;
37 import com
.sun
.star
.text
.XSimpleText
;
38 import com
.sun
.star
.uno
.UnoRuntime
;
41 * Testing <code>com.sun.star.table.XTableColumns</code>
44 * <li><code> insertByIndex()</code></li>
45 * <li><code> removeByIndex()</code></li>
48 * This test needs the following object relations :
50 * <li> <code>'XTableColumns.XCellRange'</code> : <code>
51 * com.sun.star.table.XCellRange</code> the cell range of
55 * Test is multithread compilant. <p>
56 * @see com.sun.star.table.XTableColumns
58 public class _XTableColumns
extends MultiMethodTest
{
60 public XTableColumns oObj
= null;
61 private XCellRange xCellRange
= null;
62 private int lastColumn
= 0;
64 public void before() {
65 xCellRange
= (XCellRange
)
66 tEnv
.getObjRelation("XTableColumns.XCellRange") ;
68 if (xCellRange
== null) throw new
69 StatusException(Status
.failed("Relation missing"));
71 lastColumn
= oObj
.getCount() - 1 ;
75 * First a number of cells in cell range are filled with data.
77 * Then columns inserted to valid positions : 1 column at 1,
78 * 1 column at 0, 2 columns at 0. <p>
80 * Then columns inserted to invalid positions : position -1,
81 * the column after last, and 0 columns inserted. <p>
83 * Has <b> OK </b> status if for valid cases :
85 * <li> content of other cells are properly shifted </li>
86 * <li> inserted columns are empty </li>
87 * <li> number of columns increases (in case if it is not the whole
88 * spreadsheet) by proper number. </li>
90 * and for invalid cases exception is thrown.
92 public void _insertByIndex() {
94 boolean result
= true;
95 int origCnt
= oObj
.getCount();
98 log
.println("Filling range ... ");
99 fillRange(xCellRange
);
101 log
.println("Inserting 1 column at position 1 ...");
102 oObj
.insertByIndex(1,1);
104 result
&= checkColumn(0, 0);
105 result
&= checkColumnEmpty(1);
106 result
&= checkColumn(2, 1);
107 result
&= checkColumn(3, 2);
108 result
&= checkColumnEmpty(4);
110 if (lastColumn
< 200) {
111 result
&= checkColumn(lastColumn
+ 1, lastColumn
);
112 result
&= oObj
.getCount() == origCnt
+ 1;
114 result
&= checkColumnEmpty(lastColumn
);
117 log
.println("Inserting 1 column at position 0 ...");
118 oObj
.insertByIndex(0,1);
120 result
&= checkColumnEmpty(0);
121 result
&= checkColumn(1, 0);
122 result
&= checkColumnEmpty(2);
123 result
&= checkColumn(3, 1);
124 result
&= checkColumn(4, 2);
125 result
&= checkColumnEmpty(5);
126 if (lastColumn
< 200) {
127 result
&= checkColumn(lastColumn
+ 2, lastColumn
);
128 result
&= oObj
.getCount() == origCnt
+ 2;
131 log
.println("Inserting 2 columns at position 0 ...");
132 oObj
.insertByIndex(0,2);
134 result
&= checkColumnEmpty(0);
135 result
&= checkColumnEmpty(1);
136 result
&= checkColumnEmpty(2);
137 result
&= checkColumn(3, 0);
138 result
&= checkColumnEmpty(4);
139 result
&= checkColumn(5, 1);
140 result
&= checkColumn(6, 2);
141 result
&= checkColumnEmpty(7);
142 if (lastColumn
< 200) {
143 result
&= checkColumn(lastColumn
+ 4, lastColumn
);
146 } catch (com
.sun
.star
.lang
.IndexOutOfBoundsException e
) {
147 e
.printStackTrace(log
);
152 // spreadsheet supports 256 columns and after inserting
153 // or removing a column their number remains the same
155 log
.println("Checking that number of column increased.");
156 result
&= oObj
.getCount() == origCnt
+ 4;
157 log
.println("Before: " + origCnt
+ ", After: " + oObj
.getCount());
159 log
.println("Number of columns is " + origCnt
+ ",") ;
160 log
.println("supposing that this is the whole spreadsheet and ");
161 log
.println("number of columns should not change.");
165 oObj
.insertByIndex(-1,1);
166 log
.println("No Exception occurred while inserting column at -1");
168 } catch (Exception e
) {
169 log
.println("Inserting column at Index -1 ... OK");
173 int cnt
= oObj
.getCount();
175 oObj
.insertByIndex(cnt
, 1);
176 log
.println("No Exception occurred while inserting column at "
179 } catch (Exception e
) {
180 log
.println("Inserting column at Index " + cnt
+ " ... OK");
184 if (tEnv
.getTestCase().getObjectName().equals("ScTableColumnsObj")) {
187 oObj
.insertByIndex(0,0);
188 log
.println("No Exception occurred while inserting 0 columns");
190 } catch (Exception e
) {
191 log
.println("Inserting 0 columns ... OK");
197 tRes
.tested( "insertByIndex()", result
);
199 } // end insertByIndex()
202 * Columns removed from valid positions : 1 column at 1,
203 * 1 column at 0, 2 columns at 0. <p>
205 * Then columns removed from invalid positions : position -1,
206 * the column after last, and 0 columns removed. <p>
208 * Has <b> OK </b> status if for valid cases :
210 * <li> content of other cells are properly shifted </li>
211 * <li> columns which are shifted left are empty </li>
212 * <li> number of columns decreases (in case if it is not the whole
213 * spreadsheet) by proper number. </li>
215 * and for invalid cases exception is thrown.
217 public void _removeByIndex() {
218 executeMethod("insertByIndex()");
220 boolean result
= true;
221 int origCnt
= oObj
.getCount();
224 log
.println("Filling range ... ");
226 log
.println("Removing 2 columns at position 0 ...");
227 oObj
.removeByIndex(0,2);
229 result
&= checkColumnEmpty(0);
230 result
&= checkColumn(1, 0);
231 result
&= checkColumnEmpty(2);
232 result
&= checkColumn(3, 1);
233 result
&= checkColumn(4, 2);
234 result
&= checkColumnEmpty(5);
235 if (lastColumn
< 200) {
236 result
&= checkColumn(lastColumn
+ 2, lastColumn
);
237 result
&= oObj
.getCount() == origCnt
- 2;
240 log
.println("Removing 1 column at position 0 ...");
241 oObj
.removeByIndex(0,1);
243 result
&= checkColumn(0, 0);
244 result
&= checkColumnEmpty(1);
245 result
&= checkColumn(2, 1);
246 result
&= checkColumn(3, 2);
247 result
&= checkColumnEmpty(4);
248 if (lastColumn
< 200) {
249 result
&= checkColumn(lastColumn
+ 1, lastColumn
);
250 result
&= oObj
.getCount() == origCnt
- 3;
253 log
.println("Removing 1 column at position 1 ...");
254 oObj
.removeByIndex(1,1);
256 result
&= checkColumn(0, 0);
257 result
&= checkColumn(1, 1);
258 result
&= checkColumn(2, 2);
259 result
&= checkColumnEmpty(3);
260 if (lastColumn
< 200) {
261 result
&= checkColumn(lastColumn
, lastColumn
);
264 } catch (com
.sun
.star
.lang
.IndexOutOfBoundsException e
) {
265 e
.printStackTrace(log
);
270 // spreadsheet supports 256 columns and after inserting
271 // or removing a column their number remains the same
273 log
.println("Checking that number of column increased.");
274 result
&= oObj
.getCount() == origCnt
- 4;
275 log
.println("Before: " + origCnt
+ ", After: " + oObj
.getCount());
277 log
.println("Number of columns is " + origCnt
+ ",") ;
278 log
.println("supposing that this is the whole spreadsheet and ");
279 log
.println("number of columns should not change.");
283 oObj
.removeByIndex(-1,1);
284 log
.println("No Exception occurred while removing column at -1");
286 } catch (Exception e
) {
287 log
.println("removing column at Index -1 ... OK");
291 int cnt
= oObj
.getCount();
293 oObj
.removeByIndex(cnt
, 1);
294 log
.println("No Exception occurred while removing column at "
297 } catch (Exception e
) {
298 log
.println("Removing column at Index " + cnt
+ " ... OK");
302 if (tEnv
.getTestCase().getObjectName().equals("ScTableColumnsObj")) {
304 oObj
.removeByIndex(0,0);
305 log
.println("No Exception occurred while removing 0 columns");
307 } catch (Exception e
) {
308 log
.println("removing 0 columns ... OK");
313 tRes
.tested( "removeByIndex()", result
);
314 } // end removeByIndex()
316 private void setCellText(XCell cell
, String text
) {
317 XSimpleText xText
= (XSimpleText
) UnoRuntime
.queryInterface
318 (XSimpleText
.class, cell
) ;
319 xText
.setString(text
);
321 private String
getCellText(XCell cell
) {
322 XSimpleText xText
= (XSimpleText
) UnoRuntime
.queryInterface
323 (XSimpleText
.class, cell
) ;
324 return xText
.getString();
328 * Fills the range with some data : two rows and 3 columns, and
329 * some columns are cleared.
331 * @param xRange Range to fill
332 * @throws IndexOutOfBoundsException if any errors occur during filling.
334 private void fillRange(XCellRange xRange
)
335 throws com
.sun
.star
.lang
.IndexOutOfBoundsException
{
337 for (int i
= 0; i
<= lastColumn
&& i
< 3; i
++) {
338 setCellText(xRange
.getCellByPosition(i
, 0), "" + i
+ "a");
339 setCellText(xRange
.getCellByPosition(i
, 1), "" + i
+ "b");
342 for (int i
= 3; i
<= lastColumn
&& i
< 10; i
++) {
343 setCellText(xRange
.getCellByPosition(i
, 0), "");
344 setCellText(xRange
.getCellByPosition(i
, 1), "");
349 * Check the column (first two rows) if it has values with
352 * @param col Column to check
353 * @param idx What indexes must be in cells
354 * @return <code>true</code> if expected indexes are found,
355 * <code>false</code> otherwise.
356 * @throws IndexOutOfBoundsException
358 private boolean checkColumn(int col
, int idx
)
359 throws com
.sun
.star
.lang
.IndexOutOfBoundsException
{
361 if (col
>= oObj
.getCount()) return true;
363 String c1
= getCellText(xCellRange
.getCellByPosition(col
, 0));
364 String c2
= getCellText(xCellRange
.getCellByPosition(col
, 1));
366 if (!((""+ idx
+ "a").equals(c1
) && (""+ idx
+ "b").equals(c2
))) {
368 log
.println("FAILED for column " + col
+ " and index " + idx
+ "("
369 + c1
+ "," + c2
+ ")");
376 * Checks if the column (first two rows) has no data in its cells.
378 * @param col Column to check
379 * @return <code>true</code> if the column is empty, <code>false</code>
380 * if first two cells contains some strings.
381 * @throws IndexOutOfBoundsException
383 private boolean checkColumnEmpty(int col
)
384 throws com
.sun
.star
.lang
.IndexOutOfBoundsException
{
386 if (col
>= oObj
.getCount()) return true;
388 String c1
= getCellText(xCellRange
.getCellByPosition(col
, 0));
389 String c2
= getCellText(xCellRange
.getCellByPosition(col
, 1));
390 if (!("".equals(c1
) && "".equals(c2
))) {
391 log
.println("FAILED for column " + col
+ " is not empty ("
392 + c1
+ "," + c2
+ ")");
398 } //finish class _XTableColumns