1*ef39d40dSAndrew Rist /**************************************************************
2cdf0e10cSrcweir  *
3*ef39d40dSAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
4*ef39d40dSAndrew Rist  * or more contributor license agreements.  See the NOTICE file
5*ef39d40dSAndrew Rist  * distributed with this work for additional information
6*ef39d40dSAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
7*ef39d40dSAndrew Rist  * to you under the Apache License, Version 2.0 (the
8*ef39d40dSAndrew Rist  * "License"); you may not use this file except in compliance
9*ef39d40dSAndrew Rist  * with the License.  You may obtain a copy of the License at
10*ef39d40dSAndrew Rist  *
11*ef39d40dSAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12*ef39d40dSAndrew Rist  *
13*ef39d40dSAndrew Rist  * Unless required by applicable law or agreed to in writing,
14*ef39d40dSAndrew Rist  * software distributed under the License is distributed on an
15*ef39d40dSAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*ef39d40dSAndrew Rist  * KIND, either express or implied.  See the License for the
17*ef39d40dSAndrew Rist  * specific language governing permissions and limitations
18*ef39d40dSAndrew Rist  * under the License.
19*ef39d40dSAndrew Rist  *
20*ef39d40dSAndrew Rist  *************************************************************/
21*ef39d40dSAndrew Rist 
22*ef39d40dSAndrew Rist 
23cdf0e10cSrcweir 
24cdf0e10cSrcweir package ifc.table;
25cdf0e10cSrcweir 
26cdf0e10cSrcweir import lib.MultiMethodTest;
27cdf0e10cSrcweir 
28cdf0e10cSrcweir import com.sun.star.sheet.XCellRangeAddressable;
29cdf0e10cSrcweir import com.sun.star.sheet.XSheetCellCursor;
30cdf0e10cSrcweir import com.sun.star.sheet.XSheetCellRange;
31cdf0e10cSrcweir import com.sun.star.sheet.XSpreadsheet;
32cdf0e10cSrcweir import com.sun.star.table.CellRangeAddress;
33cdf0e10cSrcweir import com.sun.star.table.XCellCursor;
34cdf0e10cSrcweir import com.sun.star.table.XCellRange;
35cdf0e10cSrcweir import com.sun.star.uno.UnoRuntime;
36cdf0e10cSrcweir 
37cdf0e10cSrcweir /**
38cdf0e10cSrcweir * Testing <code>com.sun.star.table.XCellCursor</code>
39cdf0e10cSrcweir * interface methods :
40cdf0e10cSrcweir * <ul>
41cdf0e10cSrcweir *  <li><code> gotoStart()</code></li>
42cdf0e10cSrcweir *  <li><code> gotoEnd()</code></li>
43cdf0e10cSrcweir *  <li><code> gotoNext()</code></li>
44cdf0e10cSrcweir *  <li><code> gotoPrevious()</code></li>
45cdf0e10cSrcweir *  <li><code> gotoOffset()</code></li>
46cdf0e10cSrcweir * </ul> <p>
47cdf0e10cSrcweir * This test needs the following object relations :
48cdf0e10cSrcweir * <ul>
49cdf0e10cSrcweir *  <li> <code>'SHEET'</code> (of type <code>XSpreadsheet</code>):
50cdf0e10cSrcweir *   is used for creating a new cell range.</li>
51cdf0e10cSrcweir * <ul> <p>
52cdf0e10cSrcweir *
53cdf0e10cSrcweir * The component tested <b>must implement</b>
54cdf0e10cSrcweir * <code>XCellRangeAddressable</code> interface. <p>
55cdf0e10cSrcweir *
56cdf0e10cSrcweir * Test is <b> NOT </b> multithread compilant. <p>
57cdf0e10cSrcweir * After test completion object environment has to be recreated.
58cdf0e10cSrcweir * @see com.sun.star.table.XCellCursor
59cdf0e10cSrcweir */
60cdf0e10cSrcweir public class _XCellCursor extends MultiMethodTest {
61cdf0e10cSrcweir 
62cdf0e10cSrcweir     public static XCellCursor oObj = null;
63cdf0e10cSrcweir     public static XSpreadsheet oSheet = null;
64cdf0e10cSrcweir 
65cdf0e10cSrcweir     /**
66cdf0e10cSrcweir      * <code>XCellRangeAddressable</code> interface is queried
67cdf0e10cSrcweir      * first for getting current position of cursor. The cursor
68cdf0e10cSrcweir      * is moved to next cell. Address of cursor obtained before
69cdf0e10cSrcweir      * and after moving. <p>
70cdf0e10cSrcweir      * Has <b> OK </b> status if cursor column is changed after
71cdf0e10cSrcweir      * movement. <p>
72cdf0e10cSrcweir      */
_gotoNext()73cdf0e10cSrcweir     public void _gotoNext(){
74cdf0e10cSrcweir         boolean bResult = false;
75cdf0e10cSrcweir         int startCol, endCol, startRow, endRow = 0;
76cdf0e10cSrcweir         int startCol2, endCol2, startRow2, endRow2 = 0;
77cdf0e10cSrcweir 
78cdf0e10cSrcweir         XCellRangeAddressable oRange = (XCellRangeAddressable)
79cdf0e10cSrcweir             UnoRuntime.queryInterface(XCellRangeAddressable.class, oObj);
80cdf0e10cSrcweir         CellRangeAddress oAddr = oRange.getRangeAddress();
81cdf0e10cSrcweir         startRow = oAddr.StartRow;
82cdf0e10cSrcweir         startCol = oAddr.StartColumn;
83cdf0e10cSrcweir         endRow = oAddr.EndRow;
84cdf0e10cSrcweir         endCol = oAddr.EndColumn;
85cdf0e10cSrcweir 
86cdf0e10cSrcweir         oObj.gotoNext();
87cdf0e10cSrcweir 
88cdf0e10cSrcweir         oAddr = oRange.getRangeAddress();
89cdf0e10cSrcweir         startRow2 = oAddr.StartRow;
90cdf0e10cSrcweir         startCol2 = oAddr.StartColumn;
91cdf0e10cSrcweir         endRow2 = oAddr.EndRow;
92cdf0e10cSrcweir         endCol2 = oAddr.EndColumn;
93cdf0e10cSrcweir 
94cdf0e10cSrcweir         if (!(startCol == startCol2)){
95cdf0e10cSrcweir             bResult = true;
96cdf0e10cSrcweir         }
97cdf0e10cSrcweir         tRes.tested( "gotoNext()", bResult );
98cdf0e10cSrcweir     }
99cdf0e10cSrcweir 
100cdf0e10cSrcweir     /**
101cdf0e10cSrcweir      * <code>XCellRangeAddressable</code> interface is queried
102cdf0e10cSrcweir      * first for getting current position of cursor. The cursor
103cdf0e10cSrcweir      * is moved then. Address of cursor obtained before
104cdf0e10cSrcweir      * and after moving. <p>
105cdf0e10cSrcweir      * Has <b> OK </b> status if starting column and row of
106cdf0e10cSrcweir      * cursor is changed after movement. <p>
107cdf0e10cSrcweir      */
_gotoOffset()108cdf0e10cSrcweir     public void _gotoOffset(){
109cdf0e10cSrcweir         boolean bResult = false;
110cdf0e10cSrcweir         int startCol, endCol, startRow, endRow = 0;
111cdf0e10cSrcweir         int startCol2, endCol2, startRow2, endRow2 = 0;
112cdf0e10cSrcweir 
113cdf0e10cSrcweir         XCellRangeAddressable oRange = (XCellRangeAddressable)
114cdf0e10cSrcweir             UnoRuntime.queryInterface(XCellRangeAddressable.class, oObj);
115cdf0e10cSrcweir         CellRangeAddress oAddr = oRange.getRangeAddress();
116cdf0e10cSrcweir         startRow = oAddr.StartRow;
117cdf0e10cSrcweir         startCol = oAddr.StartColumn;
118cdf0e10cSrcweir         endRow = oAddr.EndRow;
119cdf0e10cSrcweir         endCol = oAddr.EndColumn;
120cdf0e10cSrcweir 
121cdf0e10cSrcweir         oObj.gotoOffset(4,4);
122cdf0e10cSrcweir 
123cdf0e10cSrcweir         oAddr = oRange.getRangeAddress();
124cdf0e10cSrcweir         startRow2 = oAddr.StartRow;
125cdf0e10cSrcweir         startCol2 = oAddr.StartColumn;
126cdf0e10cSrcweir         endRow2 = oAddr.EndRow;
127cdf0e10cSrcweir         endCol2 = oAddr.EndColumn;
128cdf0e10cSrcweir         if (!(startCol == startCol2) || (startRow == startRow2)){
129cdf0e10cSrcweir             bResult = true;
130cdf0e10cSrcweir         }
131cdf0e10cSrcweir         tRes.tested( "gotoOffset()", bResult );
132cdf0e10cSrcweir     }
133cdf0e10cSrcweir 
134cdf0e10cSrcweir     /**
135cdf0e10cSrcweir      * <code>XCellRangeAddressable</code> interface is queried
136cdf0e10cSrcweir      * first for getting current position of cursor. The cursor
137cdf0e10cSrcweir      * is moved to previous cell. Address of cursor obtained before
138cdf0e10cSrcweir      * and after moving. <p>
139cdf0e10cSrcweir      * Has <b> OK </b> status if cursor column is changed after
140cdf0e10cSrcweir      * movement. <p>
141cdf0e10cSrcweir      */
_gotoPrevious()142cdf0e10cSrcweir     public void _gotoPrevious(){
143cdf0e10cSrcweir         boolean bResult = false;
144cdf0e10cSrcweir         int startCol, endCol, startRow, endRow = 0;
145cdf0e10cSrcweir         int startCol2, endCol2, startRow2, endRow2 = 0;
146cdf0e10cSrcweir 
147cdf0e10cSrcweir         XCellRangeAddressable oRange = (XCellRangeAddressable)
148cdf0e10cSrcweir                   UnoRuntime.queryInterface(XCellRangeAddressable.class, oObj);
149cdf0e10cSrcweir         CellRangeAddress oAddr = oRange.getRangeAddress();
150cdf0e10cSrcweir         startRow = oAddr.StartRow;
151cdf0e10cSrcweir         startCol = oAddr.StartColumn;
152cdf0e10cSrcweir         endRow = oAddr.EndRow;
153cdf0e10cSrcweir         endCol = oAddr.EndColumn;
154cdf0e10cSrcweir 
155cdf0e10cSrcweir         oObj.gotoPrevious();
156cdf0e10cSrcweir 
157cdf0e10cSrcweir         oAddr = oRange.getRangeAddress();
158cdf0e10cSrcweir         startRow2 = oAddr.StartRow;
159cdf0e10cSrcweir         startCol2 = oAddr.StartColumn;
160cdf0e10cSrcweir         endRow2 = oAddr.EndRow;
161cdf0e10cSrcweir         endCol2 = oAddr.EndColumn;
162cdf0e10cSrcweir 
163cdf0e10cSrcweir         if (!(startCol == startCol2)){
164cdf0e10cSrcweir             bResult = true;
165cdf0e10cSrcweir         }
166cdf0e10cSrcweir         tRes.tested( "gotoPrevious()", bResult );
167cdf0e10cSrcweir     }
168cdf0e10cSrcweir 
169cdf0e10cSrcweir     /**
170cdf0e10cSrcweir      * <code>XCellRangeAddressable</code> interface is queried
171cdf0e10cSrcweir      * first for getting current position of cursor. The cursor
172cdf0e10cSrcweir      * is moved to the start of its range .
173cdf0e10cSrcweir      * Address of cursor obtained before and after moving. <p>
174cdf0e10cSrcweir      * Has <b> OK </b> status if cursor was collapsed to a single
175cdf0e10cSrcweir      * cell (i.e. start column is the same as end column) after
176cdf0e10cSrcweir      * movement. <p>
177cdf0e10cSrcweir      */
_gotoStart()178cdf0e10cSrcweir     public void _gotoStart(){
179cdf0e10cSrcweir         boolean bResult = false;
180cdf0e10cSrcweir         int startCol, endCol, startRow, endRow = 0;
181cdf0e10cSrcweir 
182cdf0e10cSrcweir         XCellRangeAddressable oRange = (XCellRangeAddressable)
183cdf0e10cSrcweir                 UnoRuntime.queryInterface(XCellRangeAddressable.class, oObj);
184cdf0e10cSrcweir         oObj.gotoStart();
185cdf0e10cSrcweir         CellRangeAddress oAddr = oRange.getRangeAddress();
186cdf0e10cSrcweir         startRow = oAddr.StartRow;
187cdf0e10cSrcweir         startCol = oAddr.StartColumn;
188cdf0e10cSrcweir         endRow = oAddr.EndRow;
189cdf0e10cSrcweir         endCol = oAddr.EndColumn;
190cdf0e10cSrcweir         if ((startCol == endCol) && (endRow == startRow)){
191cdf0e10cSrcweir             bResult = true;
192cdf0e10cSrcweir         }
193cdf0e10cSrcweir 
194cdf0e10cSrcweir         tRes.tested( "gotoStart()", bResult );
195cdf0e10cSrcweir     }
196cdf0e10cSrcweir 
197cdf0e10cSrcweir     /**
198cdf0e10cSrcweir      * A new cell range is created using spreadsheet passed by relation.
199cdf0e10cSrcweir      * The method is tested on that range. <code>gotoEnd</code> is
200cdf0e10cSrcweir      * called and range address is checked.<p>
201cdf0e10cSrcweir      * Has <b> OK </b> status if cursor was collapsed to a single
202cdf0e10cSrcweir      * cell (i.e. start column is the same as end column) after
203cdf0e10cSrcweir      * movement. <p>
204cdf0e10cSrcweir      */
_gotoEnd()205cdf0e10cSrcweir     public void _gotoEnd(){
206cdf0e10cSrcweir         //gotoEnd gets it's own cursor to see a change
207cdf0e10cSrcweir         oSheet = (XSpreadsheet) tEnv.getObjRelation("SHEET");
208cdf0e10cSrcweir         XCellRange testRange = oSheet.getCellRangeByName("$A$1:$g$7") ;
209cdf0e10cSrcweir         XSheetCellRange testSheetRange = (XSheetCellRange)
210cdf0e10cSrcweir                     UnoRuntime.queryInterface(XSheetCellRange.class,testRange);
211cdf0e10cSrcweir         XSheetCellCursor oCellCursor = oSheet.createCursorByRange
212cdf0e10cSrcweir             (testSheetRange);
213cdf0e10cSrcweir         XCellCursor oCursor = (XCellCursor)
214cdf0e10cSrcweir             UnoRuntime.queryInterface(XCellCursor.class,oCellCursor);
215cdf0e10cSrcweir 
216cdf0e10cSrcweir         boolean bResult = false;
217cdf0e10cSrcweir         int startCol, endCol, startRow, endRow = 0;
218cdf0e10cSrcweir 
219cdf0e10cSrcweir         XCellRangeAddressable oRange = (XCellRangeAddressable)
220cdf0e10cSrcweir             UnoRuntime.queryInterface(XCellRangeAddressable.class, oCursor);
221cdf0e10cSrcweir         oCursor.gotoEnd();
222cdf0e10cSrcweir         CellRangeAddress oAddr = oRange.getRangeAddress();
223cdf0e10cSrcweir         startRow = oAddr.StartRow;
224cdf0e10cSrcweir         startCol = oAddr.StartColumn;
225cdf0e10cSrcweir         endRow = oAddr.EndRow;
226cdf0e10cSrcweir         endCol = oAddr.EndColumn;
227cdf0e10cSrcweir         if ((startCol == endCol) && (endRow == startRow)){
228cdf0e10cSrcweir             bResult = true;
229cdf0e10cSrcweir         }
230cdf0e10cSrcweir 
231cdf0e10cSrcweir         tRes.tested( "gotoEnd()", bResult );
232cdf0e10cSrcweir     }
233cdf0e10cSrcweir 
234cdf0e10cSrcweir     /**
235cdf0e10cSrcweir     * Forces object environment recreation.
236cdf0e10cSrcweir     */
after()237cdf0e10cSrcweir     protected void after() {
238cdf0e10cSrcweir         disposeEnvironment();
239cdf0e10cSrcweir     }
240cdf0e10cSrcweir 
241cdf0e10cSrcweir 
242cdf0e10cSrcweir } //EOC _XCellCursor
243cdf0e10cSrcweir 
244