Version 3.6.0.4, tag libreoffice-3.6.0.4
[LibreOffice.git] / qadevOOo / tests / java / ifc / table / _XTableColumns.java
blobd46ae6dae70efb7fed55f720b984593eac91b589
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 ************************************************************************/
28 package ifc.table;
30 import lib.MultiMethodTest;
31 import lib.Status;
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;
40 /**
41 * Testing <code>com.sun.star.table.XTableColumns</code>
42 * interface methods :
43 * <ul>
44 * <li><code> insertByIndex()</code></li>
45 * <li><code> removeByIndex()</code></li>
46 * </ul> <p>
48 * This test needs the following object relations :
49 * <ul>
50 * <li> <code>'XTableColumns.XCellRange'</code> : <code>
51 * com.sun.star.table.XCellRange</code> the cell range of
52 * columns.</li>
53 * <ul> <p>
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 ;
74 /**
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 :
84 * <ul>
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>
89 * </ul>
90 * and for invalid cases exception is thrown.
92 public void _insertByIndex() {
94 boolean result = true;
95 int origCnt = oObj.getCount();
97 try {
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;
113 } else {
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);
148 result = false;
152 // spreadsheet supports 256 columns and after inserting
153 // or removing a column their number remains the same
154 if (origCnt < 200) {
155 log.println("Checking that number of column increased.");
156 result &= oObj.getCount() == origCnt + 4;
157 log.println("Before: " + origCnt + ", After: " + oObj.getCount());
158 } else {
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.");
164 try {
165 oObj.insertByIndex(-1,1);
166 log.println("No Exception occurred while inserting column at -1");
167 result &= false;
168 } catch (Exception e) {
169 log.println("Inserting column at Index -1 ... OK");
170 result &= true;
173 int cnt = oObj.getCount();
174 try {
175 oObj.insertByIndex(cnt, 1);
176 log.println("No Exception occurred while inserting column at "
177 + cnt);
178 result &= false;
179 } catch (Exception e) {
180 log.println("Inserting column at Index " + cnt + " ... OK");
181 result &= true;
184 if (tEnv.getTestCase().getObjectName().equals("ScTableColumnsObj")) {
186 try {
187 oObj.insertByIndex(0,0);
188 log.println("No Exception occurred while inserting 0 columns");
189 result &= false;
190 } catch (Exception e) {
191 log.println("Inserting 0 columns ... OK");
192 result &= true;
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 :
209 * <ul>
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>
214 * </ul>
215 * and for invalid cases exception is thrown.
217 public void _removeByIndex() {
218 executeMethod("insertByIndex()");
220 boolean result = true;
221 int origCnt = oObj.getCount();
223 try {
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);
266 result = false;
270 // spreadsheet supports 256 columns and after inserting
271 // or removing a column their number remains the same
272 if (origCnt < 200) {
273 log.println("Checking that number of column increased.");
274 result &= oObj.getCount() == origCnt - 4;
275 log.println("Before: " + origCnt + ", After: " + oObj.getCount());
276 } else {
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.");
282 try {
283 oObj.removeByIndex(-1,1);
284 log.println("No Exception occurred while removing column at -1");
285 result &= false;
286 } catch (Exception e) {
287 log.println("removing column at Index -1 ... OK");
288 result &= true;
291 int cnt = oObj.getCount();
292 try {
293 oObj.removeByIndex(cnt, 1);
294 log.println("No Exception occurred while removing column at "
295 + cnt);
296 result &= false;
297 } catch (Exception e) {
298 log.println("Removing column at Index " + cnt + " ... OK");
299 result &= true;
302 if (tEnv.getTestCase().getObjectName().equals("ScTableColumnsObj")) {
303 try {
304 oObj.removeByIndex(0,0);
305 log.println("No Exception occurred while removing 0 columns");
306 result &= false;
307 } catch (Exception e) {
308 log.println("removing 0 columns ... OK");
309 result &= true;
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
350 * index specified.
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 + ")");
370 return false ;
372 return true;
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 + ")");
393 return false ;
395 return true;
398 } //finish class _XTableColumns