1*b1cdbd2cSJim Jagielski /**************************************************************
2*b1cdbd2cSJim Jagielski  *
3*b1cdbd2cSJim Jagielski  * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski  * or more contributor license agreements.  See the NOTICE file
5*b1cdbd2cSJim Jagielski  * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski  * regarding copyright ownership.  The ASF licenses this file
7*b1cdbd2cSJim Jagielski  * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski  * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski  * with the License.  You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski  *
11*b1cdbd2cSJim Jagielski  *   http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski  *
13*b1cdbd2cSJim Jagielski  * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski  * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski  * KIND, either express or implied.  See the License for the
17*b1cdbd2cSJim Jagielski  * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski  * under the License.
19*b1cdbd2cSJim Jagielski  *
20*b1cdbd2cSJim Jagielski  *************************************************************/
21*b1cdbd2cSJim Jagielski package fvt.uno.sc.data;
22*b1cdbd2cSJim Jagielski 
23*b1cdbd2cSJim Jagielski import static org.junit.Assert.*;
24*b1cdbd2cSJim Jagielski 
25*b1cdbd2cSJim Jagielski import org.junit.After;
26*b1cdbd2cSJim Jagielski import org.junit.AfterClass;
27*b1cdbd2cSJim Jagielski import org.junit.Before;
28*b1cdbd2cSJim Jagielski import org.junit.BeforeClass;
29*b1cdbd2cSJim Jagielski import org.junit.Test;
30*b1cdbd2cSJim Jagielski import org.openoffice.test.common.Testspace;
31*b1cdbd2cSJim Jagielski import org.openoffice.test.uno.UnoApp;
32*b1cdbd2cSJim Jagielski import testlib.uno.SCUtil;
33*b1cdbd2cSJim Jagielski import com.sun.star.beans.XPropertySet;
34*b1cdbd2cSJim Jagielski import com.sun.star.lang.XComponent;
35*b1cdbd2cSJim Jagielski import com.sun.star.sheet.FilterOperator;
36*b1cdbd2cSJim Jagielski import com.sun.star.sheet.TableFilterField;
37*b1cdbd2cSJim Jagielski import com.sun.star.sheet.XCellAddressable;
38*b1cdbd2cSJim Jagielski import com.sun.star.sheet.XSheetFilterDescriptor;
39*b1cdbd2cSJim Jagielski import com.sun.star.sheet.XSheetFilterable;
40*b1cdbd2cSJim Jagielski import com.sun.star.sheet.XSpreadsheet;
41*b1cdbd2cSJim Jagielski import com.sun.star.sheet.XSpreadsheetDocument;
42*b1cdbd2cSJim Jagielski import com.sun.star.table.CellAddress;
43*b1cdbd2cSJim Jagielski import com.sun.star.table.XCell;
44*b1cdbd2cSJim Jagielski import com.sun.star.table.XCellRange;
45*b1cdbd2cSJim Jagielski import com.sun.star.table.XColumnRowRange;
46*b1cdbd2cSJim Jagielski import com.sun.star.table.XTableRows;
47*b1cdbd2cSJim Jagielski import com.sun.star.uno.UnoRuntime;
48*b1cdbd2cSJim Jagielski 
49*b1cdbd2cSJim Jagielski 
50*b1cdbd2cSJim Jagielski public class StandardFilterOption {
51*b1cdbd2cSJim Jagielski 	UnoApp unoApp = new UnoApp();
52*b1cdbd2cSJim Jagielski 	XSpreadsheetDocument scDocument = null;
53*b1cdbd2cSJim Jagielski 	XComponent scComponent = null;
54*b1cdbd2cSJim Jagielski 	private String filename = "FilterTest.xls";
55*b1cdbd2cSJim Jagielski 
56*b1cdbd2cSJim Jagielski 	@Before
setUpDocument()57*b1cdbd2cSJim Jagielski 	public void setUpDocument() throws Exception {
58*b1cdbd2cSJim Jagielski 		unoApp.start();
59*b1cdbd2cSJim Jagielski 	}
60*b1cdbd2cSJim Jagielski 
61*b1cdbd2cSJim Jagielski 	@After
tearDownDocument()62*b1cdbd2cSJim Jagielski 	public void tearDownDocument() {
63*b1cdbd2cSJim Jagielski 		unoApp.close();
64*b1cdbd2cSJim Jagielski 		unoApp.closeDocument(scComponent);
65*b1cdbd2cSJim Jagielski 
66*b1cdbd2cSJim Jagielski 	}
67*b1cdbd2cSJim Jagielski 
68*b1cdbd2cSJim Jagielski 	@BeforeClass
setUpConnection()69*b1cdbd2cSJim Jagielski 	public static void setUpConnection() throws Exception {
70*b1cdbd2cSJim Jagielski 
71*b1cdbd2cSJim Jagielski 	}
72*b1cdbd2cSJim Jagielski 
73*b1cdbd2cSJim Jagielski 	@AfterClass
tearDownConnection()74*b1cdbd2cSJim Jagielski 	public static void tearDownConnection() throws InterruptedException, Exception {
75*b1cdbd2cSJim Jagielski 
76*b1cdbd2cSJim Jagielski 	}
77*b1cdbd2cSJim Jagielski 
78*b1cdbd2cSJim Jagielski 	/**
79*b1cdbd2cSJim Jagielski 	 * test standard filter with string
80*b1cdbd2cSJim Jagielski 	 */
81*b1cdbd2cSJim Jagielski 	@Test
testStandardFilterForString()82*b1cdbd2cSJim Jagielski 	public void testStandardFilterForString() throws Exception {
83*b1cdbd2cSJim Jagielski 		// Prepare test data
84*b1cdbd2cSJim Jagielski 		String sample = Testspace.prepareData(filename);
85*b1cdbd2cSJim Jagielski 		// Open document
86*b1cdbd2cSJim Jagielski 		scDocument = SCUtil.openFile(sample, unoApp);
87*b1cdbd2cSJim Jagielski 		// Get cell range
88*b1cdbd2cSJim Jagielski 		XCellRange xdataRange = (XCellRange) UnoRuntime.queryInterface(XCellRange.class, SCUtil.getCurrentSheet(scDocument));
89*b1cdbd2cSJim Jagielski 
90*b1cdbd2cSJim Jagielski 		// Set filter property and filter the cell range
91*b1cdbd2cSJim Jagielski 		XSheetFilterable xFilter = (XSheetFilterable) UnoRuntime.queryInterface(XSheetFilterable.class, xdataRange.getCellRangeByName("A1:F6"));
92*b1cdbd2cSJim Jagielski 		XSheetFilterDescriptor xFilterDesc = xFilter.createFilterDescriptor(true);
93*b1cdbd2cSJim Jagielski 		TableFilterField[] aFilterFields = new TableFilterField[1];
94*b1cdbd2cSJim Jagielski 		aFilterFields[0] = new TableFilterField();
95*b1cdbd2cSJim Jagielski 		aFilterFields[0].Field = 0;
96*b1cdbd2cSJim Jagielski 		aFilterFields[0].IsNumeric = false;
97*b1cdbd2cSJim Jagielski 		aFilterFields[0].Operator = FilterOperator.EQUAL;
98*b1cdbd2cSJim Jagielski 		aFilterFields[0].StringValue = "Tom";
99*b1cdbd2cSJim Jagielski 		xFilterDesc.setFilterFields(aFilterFields);
100*b1cdbd2cSJim Jagielski 		XPropertySet xFilterProp = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class, xFilterDesc);
101*b1cdbd2cSJim Jagielski 		xFilterProp.setPropertyValue("ContainsHeader", new Boolean(true));
102*b1cdbd2cSJim Jagielski 		xFilter.filter(xFilterDesc);
103*b1cdbd2cSJim Jagielski 
104*b1cdbd2cSJim Jagielski 		// Verify filter result
105*b1cdbd2cSJim Jagielski 		XColumnRowRange ColRowRange = (XColumnRowRange) UnoRuntime.queryInterface(XColumnRowRange.class, xdataRange.getCellRangeByName("A1:E6"));
106*b1cdbd2cSJim Jagielski 		XTableRows Rows = ColRowRange.getRows();
107*b1cdbd2cSJim Jagielski 		for (int i = 0; i < Rows.getCount() - 1; i++) {
108*b1cdbd2cSJim Jagielski 			Object aRowObj = Rows.getByIndex(i);
109*b1cdbd2cSJim Jagielski 			XPropertySet PropSet = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class, aRowObj);
110*b1cdbd2cSJim Jagielski 			if (i == 0 | i == 5) {
111*b1cdbd2cSJim Jagielski 				assertTrue("Verify row is invisible.", (Boolean) PropSet.getPropertyValue("IsVisible"));
112*b1cdbd2cSJim Jagielski 			} else
113*b1cdbd2cSJim Jagielski 				assertFalse("Verify row is invisible.", (Boolean) PropSet.getPropertyValue("IsVisible"));
114*b1cdbd2cSJim Jagielski 		}
115*b1cdbd2cSJim Jagielski 
116*b1cdbd2cSJim Jagielski 		// Save and reload the document
117*b1cdbd2cSJim Jagielski 		SCUtil.save(scDocument);
118*b1cdbd2cSJim Jagielski 		SCUtil.closeFile(scDocument);
119*b1cdbd2cSJim Jagielski 		scDocument = SCUtil.openFile(sample, unoApp);
120*b1cdbd2cSJim Jagielski 
121*b1cdbd2cSJim Jagielski 		// Verify the result again
122*b1cdbd2cSJim Jagielski 		xdataRange = (XCellRange) UnoRuntime.queryInterface(XCellRange.class, SCUtil.getCurrentSheet(scDocument));
123*b1cdbd2cSJim Jagielski 		ColRowRange = (XColumnRowRange) UnoRuntime.queryInterface(XColumnRowRange.class, xdataRange.getCellRangeByName("A1:E6"));
124*b1cdbd2cSJim Jagielski 		Rows = ColRowRange.getRows();
125*b1cdbd2cSJim Jagielski 		for (int i = 0; i < Rows.getCount() - 1; i++) {
126*b1cdbd2cSJim Jagielski 			Object aRowObj = Rows.getByIndex(i);
127*b1cdbd2cSJim Jagielski 			XPropertySet PropSet = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class, aRowObj);
128*b1cdbd2cSJim Jagielski 			if (i == 0 | i == 5) {
129*b1cdbd2cSJim Jagielski 				assertTrue("Verify row is invisible.", (Boolean) PropSet.getPropertyValue("IsVisible"));
130*b1cdbd2cSJim Jagielski 			} else
131*b1cdbd2cSJim Jagielski 				assertFalse("Verify row is invisible.", (Boolean) PropSet.getPropertyValue("IsVisible"));
132*b1cdbd2cSJim Jagielski 		}
133*b1cdbd2cSJim Jagielski 
134*b1cdbd2cSJim Jagielski 	}
135*b1cdbd2cSJim Jagielski 
136*b1cdbd2cSJim Jagielski 	/**
137*b1cdbd2cSJim Jagielski 	 * test standard filter with case sensitive options
138*b1cdbd2cSJim Jagielski 	 */
139*b1cdbd2cSJim Jagielski 	@Test
testStandardFilterOptionCaseSensitive()140*b1cdbd2cSJim Jagielski 	public void testStandardFilterOptionCaseSensitive() throws Exception {
141*b1cdbd2cSJim Jagielski 		// Prepare test data
142*b1cdbd2cSJim Jagielski 		String sample = Testspace.prepareData(filename);
143*b1cdbd2cSJim Jagielski 		// Open document
144*b1cdbd2cSJim Jagielski 		scDocument = SCUtil.openFile(sample, unoApp);
145*b1cdbd2cSJim Jagielski 		// Get cell range
146*b1cdbd2cSJim Jagielski 		XCellRange xdataRange = (XCellRange) UnoRuntime.queryInterface(XCellRange.class, SCUtil.getCurrentSheet(scDocument));
147*b1cdbd2cSJim Jagielski 
148*b1cdbd2cSJim Jagielski 		// Set filter property and filter the cell range
149*b1cdbd2cSJim Jagielski 		XSheetFilterable xFilter = (XSheetFilterable) UnoRuntime.queryInterface(XSheetFilterable.class, xdataRange.getCellRangeByName("A1:F6"));
150*b1cdbd2cSJim Jagielski 		XSheetFilterDescriptor xFilterDesc = xFilter.createFilterDescriptor(true);
151*b1cdbd2cSJim Jagielski 		TableFilterField[] aFilterFields = new TableFilterField[1];
152*b1cdbd2cSJim Jagielski 		aFilterFields[0] = new TableFilterField();
153*b1cdbd2cSJim Jagielski 		aFilterFields[0].Field = 5;
154*b1cdbd2cSJim Jagielski 		aFilterFields[0].IsNumeric = false;
155*b1cdbd2cSJim Jagielski 		aFilterFields[0].Operator = FilterOperator.EQUAL;
156*b1cdbd2cSJim Jagielski 		aFilterFields[0].StringValue = "No";
157*b1cdbd2cSJim Jagielski 		xFilterDesc.setFilterFields(aFilterFields);
158*b1cdbd2cSJim Jagielski 		XPropertySet xFilterProp = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class, xFilterDesc);
159*b1cdbd2cSJim Jagielski 		xFilterProp.setPropertyValue("ContainsHeader", new Boolean(true));
160*b1cdbd2cSJim Jagielski 		xFilterProp.setPropertyValue("IsCaseSensitive", false);
161*b1cdbd2cSJim Jagielski 		xFilter.filter(xFilterDesc);
162*b1cdbd2cSJim Jagielski 
163*b1cdbd2cSJim Jagielski 		// Verify filter result
164*b1cdbd2cSJim Jagielski 		XColumnRowRange ColRowRange = (XColumnRowRange) UnoRuntime.queryInterface(XColumnRowRange.class, xdataRange.getCellRangeByName("A1:F6"));
165*b1cdbd2cSJim Jagielski 		XTableRows Rows = ColRowRange.getRows();
166*b1cdbd2cSJim Jagielski 		for (int i = 0; i < Rows.getCount() - 1; i++) {
167*b1cdbd2cSJim Jagielski 			Object aRowObj = Rows.getByIndex(i);
168*b1cdbd2cSJim Jagielski 			XPropertySet PropSet = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class, aRowObj);
169*b1cdbd2cSJim Jagielski 			if (i == 0 | i == 1 | i == 5) {
170*b1cdbd2cSJim Jagielski 				assertTrue("Expect should be True", (Boolean) PropSet.getPropertyValue("IsVisible"));
171*b1cdbd2cSJim Jagielski 			} else
172*b1cdbd2cSJim Jagielski 				assertFalse("Expect should be false", (Boolean) PropSet.getPropertyValue("IsVisible"));
173*b1cdbd2cSJim Jagielski 		}
174*b1cdbd2cSJim Jagielski 
175*b1cdbd2cSJim Jagielski 		// Change to CaseSenstive
176*b1cdbd2cSJim Jagielski 		xFilterProp.setPropertyValue("IsCaseSensitive", true);
177*b1cdbd2cSJim Jagielski 		xFilter.filter(xFilterDesc);
178*b1cdbd2cSJim Jagielski 
179*b1cdbd2cSJim Jagielski 		// Verify result
180*b1cdbd2cSJim Jagielski 		for (int i = 0; i < Rows.getCount() - 1; i++) {
181*b1cdbd2cSJim Jagielski 			Object aRowObj = Rows.getByIndex(i);
182*b1cdbd2cSJim Jagielski 			XPropertySet PropSet = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class, aRowObj);
183*b1cdbd2cSJim Jagielski 			if (i == 0 | i == 5) {
184*b1cdbd2cSJim Jagielski 				assertTrue("Expect should be True", (Boolean) PropSet.getPropertyValue("IsVisible"));
185*b1cdbd2cSJim Jagielski 			} else
186*b1cdbd2cSJim Jagielski 				assertFalse("Expect should be false", (Boolean) PropSet.getPropertyValue("IsVisible"));
187*b1cdbd2cSJim Jagielski 		}
188*b1cdbd2cSJim Jagielski 
189*b1cdbd2cSJim Jagielski 		// Save and reload the document
190*b1cdbd2cSJim Jagielski 		SCUtil.save(scDocument);
191*b1cdbd2cSJim Jagielski 		SCUtil.closeFile(scDocument);
192*b1cdbd2cSJim Jagielski 		scDocument = SCUtil.openFile(sample, unoApp);
193*b1cdbd2cSJim Jagielski 
194*b1cdbd2cSJim Jagielski 		// Verify the result again
195*b1cdbd2cSJim Jagielski 		xdataRange = (XCellRange) UnoRuntime.queryInterface(XCellRange.class, SCUtil.getCurrentSheet(scDocument));
196*b1cdbd2cSJim Jagielski 		ColRowRange = (XColumnRowRange) UnoRuntime.queryInterface(XColumnRowRange.class, xdataRange.getCellRangeByName("A1:F6"));
197*b1cdbd2cSJim Jagielski 		Rows = ColRowRange.getRows();
198*b1cdbd2cSJim Jagielski 		for (int i = 0; i < Rows.getCount() - 1; i++) {
199*b1cdbd2cSJim Jagielski 			Object aRowObj = Rows.getByIndex(i);
200*b1cdbd2cSJim Jagielski 			XPropertySet PropSet = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class, aRowObj);
201*b1cdbd2cSJim Jagielski 			if (i == 0 | i == 5) {
202*b1cdbd2cSJim Jagielski 				assertTrue("Expect should be True", (Boolean) PropSet.getPropertyValue("IsVisible"));
203*b1cdbd2cSJim Jagielski 			} else
204*b1cdbd2cSJim Jagielski 				assertFalse("Expect should be false", (Boolean) PropSet.getPropertyValue("IsVisible"));
205*b1cdbd2cSJim Jagielski 		}
206*b1cdbd2cSJim Jagielski 	}
207*b1cdbd2cSJim Jagielski 
208*b1cdbd2cSJim Jagielski 	/**
209*b1cdbd2cSJim Jagielski 	 * test standard filter with contain header options
210*b1cdbd2cSJim Jagielski 	 */
211*b1cdbd2cSJim Jagielski 	@Test
testStandardFilterOptionContainsHeader()212*b1cdbd2cSJim Jagielski 	public void testStandardFilterOptionContainsHeader() throws Exception {
213*b1cdbd2cSJim Jagielski 		// Prepare test data
214*b1cdbd2cSJim Jagielski 		String sample = Testspace.prepareData(filename);
215*b1cdbd2cSJim Jagielski 		// Open document
216*b1cdbd2cSJim Jagielski 		scDocument = SCUtil.openFile(sample, unoApp);
217*b1cdbd2cSJim Jagielski 		// Get cell range
218*b1cdbd2cSJim Jagielski 		XCellRange xdataRange = (XCellRange) UnoRuntime.queryInterface(XCellRange.class, SCUtil.getCurrentSheet(scDocument));
219*b1cdbd2cSJim Jagielski 
220*b1cdbd2cSJim Jagielski 		// Set filter property and filter the cell range
221*b1cdbd2cSJim Jagielski 		XSheetFilterable xFilter = (XSheetFilterable) UnoRuntime.queryInterface(XSheetFilterable.class, xdataRange.getCellRangeByName("A1:F6"));
222*b1cdbd2cSJim Jagielski 		XSheetFilterDescriptor xFilterDesc = xFilter.createFilterDescriptor(true);
223*b1cdbd2cSJim Jagielski 		TableFilterField[] aFilterFields = new TableFilterField[1];
224*b1cdbd2cSJim Jagielski 		aFilterFields[0] = new TableFilterField();
225*b1cdbd2cSJim Jagielski 		aFilterFields[0].Field = 2;
226*b1cdbd2cSJim Jagielski 		aFilterFields[0].IsNumeric = true;
227*b1cdbd2cSJim Jagielski 		aFilterFields[0].Operator = FilterOperator.LESS;
228*b1cdbd2cSJim Jagielski 		aFilterFields[0].NumericValue = 44;
229*b1cdbd2cSJim Jagielski 		xFilterDesc.setFilterFields(aFilterFields);
230*b1cdbd2cSJim Jagielski 		XPropertySet xFilterProp = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class, xFilterDesc);
231*b1cdbd2cSJim Jagielski 		xFilterProp.setPropertyValue("ContainsHeader", new Boolean(true));
232*b1cdbd2cSJim Jagielski 		xFilter.filter(xFilterDesc);
233*b1cdbd2cSJim Jagielski 
234*b1cdbd2cSJim Jagielski 		// Verify filter result
235*b1cdbd2cSJim Jagielski 		XColumnRowRange ColRowRange = (XColumnRowRange) UnoRuntime.queryInterface(XColumnRowRange.class, xdataRange.getCellRangeByName("A1:E6"));
236*b1cdbd2cSJim Jagielski 		XTableRows Rows = ColRowRange.getRows();
237*b1cdbd2cSJim Jagielski 		for (int i = 0; i < Rows.getCount() - 1; i++) {
238*b1cdbd2cSJim Jagielski 			Object aRowObj = Rows.getByIndex(i);
239*b1cdbd2cSJim Jagielski 			XPropertySet PropSet = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class, aRowObj);
240*b1cdbd2cSJim Jagielski 			if (i == 0 | i == 1 | i == 4) {
241*b1cdbd2cSJim Jagielski 				assertTrue("Expect result should be True", (Boolean) PropSet.getPropertyValue("IsVisible"));
242*b1cdbd2cSJim Jagielski 			} else
243*b1cdbd2cSJim Jagielski 				assertFalse("Expect result should be false", (Boolean) PropSet.getPropertyValue("IsVisible"));
244*b1cdbd2cSJim Jagielski 		}
245*b1cdbd2cSJim Jagielski 
246*b1cdbd2cSJim Jagielski 		// Change to not contain header
247*b1cdbd2cSJim Jagielski 		xFilterProp.setPropertyValue("ContainsHeader", new Boolean(false));
248*b1cdbd2cSJim Jagielski 		xFilter.filter(xFilterDesc);
249*b1cdbd2cSJim Jagielski 
250*b1cdbd2cSJim Jagielski 		// Verify result
251*b1cdbd2cSJim Jagielski 		for (int i = 0; i < Rows.getCount() - 1; i++) {
252*b1cdbd2cSJim Jagielski 			Object aRowObj = Rows.getByIndex(i);
253*b1cdbd2cSJim Jagielski 			XPropertySet PropSet = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class, aRowObj);
254*b1cdbd2cSJim Jagielski 			if (i == 1 | i == 4) {
255*b1cdbd2cSJim Jagielski 				assertTrue("Expect result should be True", (Boolean) PropSet.getPropertyValue("IsVisible"));
256*b1cdbd2cSJim Jagielski 			} else
257*b1cdbd2cSJim Jagielski 				assertFalse("Expect result should be false", (Boolean) PropSet.getPropertyValue("IsVisible"));
258*b1cdbd2cSJim Jagielski 		}
259*b1cdbd2cSJim Jagielski 
260*b1cdbd2cSJim Jagielski 		// Save the document
261*b1cdbd2cSJim Jagielski 		SCUtil.save(scDocument);
262*b1cdbd2cSJim Jagielski 		SCUtil.closeFile(scDocument);
263*b1cdbd2cSJim Jagielski 		scDocument = SCUtil.openFile(sample, unoApp);
264*b1cdbd2cSJim Jagielski 
265*b1cdbd2cSJim Jagielski 		// Verify filter result again
266*b1cdbd2cSJim Jagielski 		xdataRange = (XCellRange) UnoRuntime.queryInterface(XCellRange.class, SCUtil.getCurrentSheet(scDocument));
267*b1cdbd2cSJim Jagielski 		ColRowRange = (XColumnRowRange) UnoRuntime.queryInterface(XColumnRowRange.class, xdataRange.getCellRangeByName("A1:F6"));
268*b1cdbd2cSJim Jagielski 		Rows = ColRowRange.getRows();
269*b1cdbd2cSJim Jagielski 		for (int i = 0; i < Rows.getCount() - 1; i++) {
270*b1cdbd2cSJim Jagielski 			Object aRowObj = Rows.getByIndex(i);
271*b1cdbd2cSJim Jagielski 			XPropertySet PropSet = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class, aRowObj);
272*b1cdbd2cSJim Jagielski 			if (i == 1 | i == 4) {
273*b1cdbd2cSJim Jagielski 				assertTrue("Expect result should be True", (Boolean) PropSet.getPropertyValue("IsVisible"));
274*b1cdbd2cSJim Jagielski 			} else
275*b1cdbd2cSJim Jagielski 				assertFalse("Expect result should be false", (Boolean) PropSet.getPropertyValue("IsVisible"));
276*b1cdbd2cSJim Jagielski 		}
277*b1cdbd2cSJim Jagielski 
278*b1cdbd2cSJim Jagielski 	}
279*b1cdbd2cSJim Jagielski 
280*b1cdbd2cSJim Jagielski 	/**
281*b1cdbd2cSJim Jagielski 	 * test standard filter with copy out put after filter in options
282*b1cdbd2cSJim Jagielski 	 */
283*b1cdbd2cSJim Jagielski 	@Test
testStandardFilterOptionCopyOutput()284*b1cdbd2cSJim Jagielski 	public void testStandardFilterOptionCopyOutput() throws Exception {
285*b1cdbd2cSJim Jagielski 		// Prepare test data
286*b1cdbd2cSJim Jagielski 		String sample = Testspace.prepareData(filename);
287*b1cdbd2cSJim Jagielski 		// Open document
288*b1cdbd2cSJim Jagielski 		scDocument = SCUtil.openFile(sample, unoApp);
289*b1cdbd2cSJim Jagielski 		// Get cell range
290*b1cdbd2cSJim Jagielski 		XCellRange xdataRange = (XCellRange) UnoRuntime.queryInterface(XCellRange.class, SCUtil.getCurrentSheet(scDocument));
291*b1cdbd2cSJim Jagielski 		XSpreadsheet currentSheet = SCUtil.getCurrentSheet(scDocument);
292*b1cdbd2cSJim Jagielski 		// Get the value before filter
293*b1cdbd2cSJim Jagielski 		String[][] souce = SCUtil.getTextFromCellRange(currentSheet, 0, 0, 5, 5);
294*b1cdbd2cSJim Jagielski 
295*b1cdbd2cSJim Jagielski 		// Copy to cell position
296*b1cdbd2cSJim Jagielski 		XCell cell = currentSheet.getCellByPosition(7, 7);
297*b1cdbd2cSJim Jagielski 		XCellAddressable xCellAddr = (XCellAddressable) UnoRuntime.queryInterface(XCellAddressable.class, cell);
298*b1cdbd2cSJim Jagielski 		CellAddress copytoAddress = xCellAddr.getCellAddress();
299*b1cdbd2cSJim Jagielski 
300*b1cdbd2cSJim Jagielski 		// Set filter property and filter the cell range
301*b1cdbd2cSJim Jagielski 		XSheetFilterable xFilter = (XSheetFilterable) UnoRuntime.queryInterface(XSheetFilterable.class, xdataRange.getCellRangeByName("A1:F6"));
302*b1cdbd2cSJim Jagielski 		XSheetFilterDescriptor xFilterDesc = xFilter.createFilterDescriptor(true);
303*b1cdbd2cSJim Jagielski 		TableFilterField[] aFilterFields = new TableFilterField[1];
304*b1cdbd2cSJim Jagielski 		aFilterFields[0] = new TableFilterField();
305*b1cdbd2cSJim Jagielski 		aFilterFields[0].Field = 3;
306*b1cdbd2cSJim Jagielski 		aFilterFields[0].IsNumeric = true;
307*b1cdbd2cSJim Jagielski 		aFilterFields[0].Operator = FilterOperator.GREATER;
308*b1cdbd2cSJim Jagielski 		aFilterFields[0].NumericValue = 155;
309*b1cdbd2cSJim Jagielski 		xFilterDesc.setFilterFields(aFilterFields);
310*b1cdbd2cSJim Jagielski 		XPropertySet xFilterProp = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class, xFilterDesc);
311*b1cdbd2cSJim Jagielski 		xFilterProp.setPropertyValue("ContainsHeader", new Boolean(true));
312*b1cdbd2cSJim Jagielski 		xFilterProp.setPropertyValue("CopyOutputData", new Boolean(true));
313*b1cdbd2cSJim Jagielski 		xFilterProp.setPropertyValue("OutputPosition", copytoAddress);
314*b1cdbd2cSJim Jagielski 		xFilter.filter(xFilterDesc);
315*b1cdbd2cSJim Jagielski 
316*b1cdbd2cSJim Jagielski 		// Verify source range not changed
317*b1cdbd2cSJim Jagielski 		XColumnRowRange ColRowRange = (XColumnRowRange) UnoRuntime.queryInterface(XColumnRowRange.class, xdataRange.getCellRangeByName("A1:F6"));
318*b1cdbd2cSJim Jagielski 		XTableRows Rows = ColRowRange.getRows();
319*b1cdbd2cSJim Jagielski 		for (int i = 0; i < Rows.getCount(); i++) {
320*b1cdbd2cSJim Jagielski 			Object aRowObj = Rows.getByIndex(i);
321*b1cdbd2cSJim Jagielski 			XPropertySet PropSet = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class, aRowObj);
322*b1cdbd2cSJim Jagielski 			assertTrue("Expect should be True", (Boolean) PropSet.getPropertyValue("IsVisible"));
323*b1cdbd2cSJim Jagielski 		}
324*b1cdbd2cSJim Jagielski 
325*b1cdbd2cSJim Jagielski 		// Get the data after filter
326*b1cdbd2cSJim Jagielski 		String[][] dataafterFilter = SCUtil.getTextFromCellRange(currentSheet, 0, 0, 5, 5);
327*b1cdbd2cSJim Jagielski 		assertArrayEquals(souce, dataafterFilter);
328*b1cdbd2cSJim Jagielski 
329*b1cdbd2cSJim Jagielski 		// Get the copyto filter result, verify it
330*b1cdbd2cSJim Jagielski 		ColRowRange = (XColumnRowRange) UnoRuntime.queryInterface(XColumnRowRange.class, xdataRange.getCellRangeByName("H8:M10"));
331*b1cdbd2cSJim Jagielski 		for (int i = 0; i < Rows.getCount(); i++) {
332*b1cdbd2cSJim Jagielski 			Object aRowObj = Rows.getByIndex(i);
333*b1cdbd2cSJim Jagielski 			XPropertySet PropSet = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class, aRowObj);
334*b1cdbd2cSJim Jagielski 			assertTrue("Expect should be True", (Boolean) PropSet.getPropertyValue("IsVisible"));
335*b1cdbd2cSJim Jagielski 		}
336*b1cdbd2cSJim Jagielski 		// Verify the first filter line data
337*b1cdbd2cSJim Jagielski 		assertArrayEquals(SCUtil.getTextFromCellRange(currentSheet, 0, 0, 5, 0), SCUtil.getTextFromCellRange(currentSheet, 7, 7, 12, 7));
338*b1cdbd2cSJim Jagielski 
339*b1cdbd2cSJim Jagielski 		// Verify the Second filter line data
340*b1cdbd2cSJim Jagielski 		assertArrayEquals(SCUtil.getTextFromCellRange(currentSheet, 0, 1, 5, 1), SCUtil.getTextFromCellRange(currentSheet, 7, 8, 12, 8));
341*b1cdbd2cSJim Jagielski 
342*b1cdbd2cSJim Jagielski 		// Verify the Last filter line data
343*b1cdbd2cSJim Jagielski 		assertArrayEquals(SCUtil.getTextFromCellRange(currentSheet, 0, 4, 5, 4), SCUtil.getTextFromCellRange(currentSheet, 7, 9, 12, 9));
344*b1cdbd2cSJim Jagielski 
345*b1cdbd2cSJim Jagielski 		// Save the document
346*b1cdbd2cSJim Jagielski 		SCUtil.save(scDocument);
347*b1cdbd2cSJim Jagielski 		SCUtil.closeFile(scDocument);
348*b1cdbd2cSJim Jagielski 		scDocument = SCUtil.openFile(sample, unoApp);
349*b1cdbd2cSJim Jagielski 
350*b1cdbd2cSJim Jagielski 		// Verify filter result again
351*b1cdbd2cSJim Jagielski 		xdataRange = (XCellRange) UnoRuntime.queryInterface(XCellRange.class, SCUtil.getCurrentSheet(scDocument));
352*b1cdbd2cSJim Jagielski 		ColRowRange = (XColumnRowRange) UnoRuntime.queryInterface(XColumnRowRange.class, xdataRange.getCellRangeByName("A1:F6"));
353*b1cdbd2cSJim Jagielski 		Rows = ColRowRange.getRows();
354*b1cdbd2cSJim Jagielski 		for (int i = 0; i < Rows.getCount(); i++) {
355*b1cdbd2cSJim Jagielski 			Object aRowObj = Rows.getByIndex(i);
356*b1cdbd2cSJim Jagielski 			XPropertySet PropSet = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class, aRowObj);
357*b1cdbd2cSJim Jagielski 			assertTrue("Expect should be true", (Boolean) PropSet.getPropertyValue("IsVisible"));
358*b1cdbd2cSJim Jagielski 		}
359*b1cdbd2cSJim Jagielski 
360*b1cdbd2cSJim Jagielski 		// Get the data after filter
361*b1cdbd2cSJim Jagielski 		currentSheet = SCUtil.getCurrentSheet(scDocument);
362*b1cdbd2cSJim Jagielski 		dataafterFilter = SCUtil.getTextFromCellRange(currentSheet, 0, 0, 5, 5);
363*b1cdbd2cSJim Jagielski 		assertArrayEquals(souce, dataafterFilter);
364*b1cdbd2cSJim Jagielski 
365*b1cdbd2cSJim Jagielski 		// Get the copyto filter result, verify it
366*b1cdbd2cSJim Jagielski 		ColRowRange = (XColumnRowRange) UnoRuntime.queryInterface(XColumnRowRange.class, xdataRange.getCellRangeByName("H8:M10"));
367*b1cdbd2cSJim Jagielski 		for (int i = 0; i < Rows.getCount(); i++) {
368*b1cdbd2cSJim Jagielski 			Object aRowObj = Rows.getByIndex(i);
369*b1cdbd2cSJim Jagielski 			XPropertySet PropSet = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class, aRowObj);
370*b1cdbd2cSJim Jagielski 			assertTrue("Expect should be True", (Boolean) PropSet.getPropertyValue("IsVisible"));
371*b1cdbd2cSJim Jagielski 		}
372*b1cdbd2cSJim Jagielski 		// Verify the first filter line data
373*b1cdbd2cSJim Jagielski 		assertArrayEquals(SCUtil.getTextFromCellRange(currentSheet, 0, 0, 5, 0), SCUtil.getTextFromCellRange(currentSheet, 7, 7, 12, 7));
374*b1cdbd2cSJim Jagielski 
375*b1cdbd2cSJim Jagielski 		// Verify the Second filter line data
376*b1cdbd2cSJim Jagielski 		assertArrayEquals(SCUtil.getTextFromCellRange(currentSheet, 0, 1, 5, 1), SCUtil.getTextFromCellRange(currentSheet, 7, 8, 12, 8));
377*b1cdbd2cSJim Jagielski 
378*b1cdbd2cSJim Jagielski 		// Verify the Last filter line data
379*b1cdbd2cSJim Jagielski 		assertArrayEquals(SCUtil.getTextFromCellRange(currentSheet, 0, 4, 5, 4), SCUtil.getTextFromCellRange(currentSheet, 7, 9, 12, 9));
380*b1cdbd2cSJim Jagielski 	}
381*b1cdbd2cSJim Jagielski 
382*b1cdbd2cSJim Jagielski 	/**
383*b1cdbd2cSJim Jagielski 	 * test standard filter with skip duplicates in options
384*b1cdbd2cSJim Jagielski 	 */
385*b1cdbd2cSJim Jagielski 	@Test
testStandardFilterOptionSkipDuplicates()386*b1cdbd2cSJim Jagielski 	public void testStandardFilterOptionSkipDuplicates() throws Exception {
387*b1cdbd2cSJim Jagielski 		// Prepare test data
388*b1cdbd2cSJim Jagielski 		String sample = Testspace.prepareData(filename);
389*b1cdbd2cSJim Jagielski 		// Open document
390*b1cdbd2cSJim Jagielski 		scDocument = SCUtil.openFile(sample, unoApp);
391*b1cdbd2cSJim Jagielski 		// Get cell range
392*b1cdbd2cSJim Jagielski 		XCellRange xdataRange = (XCellRange) UnoRuntime.queryInterface(XCellRange.class, SCUtil.getCurrentSheet(scDocument));
393*b1cdbd2cSJim Jagielski 
394*b1cdbd2cSJim Jagielski 		// Set filter property and filter the cell range
395*b1cdbd2cSJim Jagielski 		XSheetFilterable xFilter = (XSheetFilterable) UnoRuntime.queryInterface(XSheetFilterable.class, xdataRange.getCellRangeByName("A1:E6"));
396*b1cdbd2cSJim Jagielski 		XSheetFilterDescriptor xFilterDesc = xFilter.createFilterDescriptor(true);
397*b1cdbd2cSJim Jagielski 		TableFilterField[] aFilterFields = new TableFilterField[1];
398*b1cdbd2cSJim Jagielski 		aFilterFields[0] = new TableFilterField();
399*b1cdbd2cSJim Jagielski 		aFilterFields[0].Field = 3;
400*b1cdbd2cSJim Jagielski 		aFilterFields[0].IsNumeric = true;
401*b1cdbd2cSJim Jagielski 		aFilterFields[0].Operator = FilterOperator.GREATER_EQUAL;
402*b1cdbd2cSJim Jagielski 		aFilterFields[0].NumericValue = 155;
403*b1cdbd2cSJim Jagielski 		xFilterDesc.setFilterFields(aFilterFields);
404*b1cdbd2cSJim Jagielski 		XPropertySet xFilterProp = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class, xFilterDesc);
405*b1cdbd2cSJim Jagielski 		xFilterProp.setPropertyValue("ContainsHeader", new Boolean(true));
406*b1cdbd2cSJim Jagielski 		xFilterProp.setPropertyValue("SkipDuplicates", new Boolean(true));
407*b1cdbd2cSJim Jagielski 		xFilter.filter(xFilterDesc);
408*b1cdbd2cSJim Jagielski 
409*b1cdbd2cSJim Jagielski 		// Verify filter result
410*b1cdbd2cSJim Jagielski 		XColumnRowRange ColRowRange = (XColumnRowRange) UnoRuntime.queryInterface(XColumnRowRange.class, xdataRange.getCellRangeByName("A1:E6"));
411*b1cdbd2cSJim Jagielski 		XTableRows Rows = ColRowRange.getRows();
412*b1cdbd2cSJim Jagielski 		for (int i = 0; i < Rows.getCount(); i++) {
413*b1cdbd2cSJim Jagielski 			Object aRowObj = Rows.getByIndex(i);
414*b1cdbd2cSJim Jagielski 			XPropertySet PropSet = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class, aRowObj);
415*b1cdbd2cSJim Jagielski 			if (i == 2) {
416*b1cdbd2cSJim Jagielski 				assertFalse("Verify row is invisible.", (Boolean) PropSet.getPropertyValue("IsVisible"));
417*b1cdbd2cSJim Jagielski 			} else
418*b1cdbd2cSJim Jagielski 				assertTrue("Verify row is invisible.", (Boolean) PropSet.getPropertyValue("IsVisible"));
419*b1cdbd2cSJim Jagielski 		}
420*b1cdbd2cSJim Jagielski 
421*b1cdbd2cSJim Jagielski 		// Change to skip Dulicates
422*b1cdbd2cSJim Jagielski 		xFilterProp.setPropertyValue("SkipDuplicates", new Boolean(false));
423*b1cdbd2cSJim Jagielski 		xFilter.filter(xFilterDesc);
424*b1cdbd2cSJim Jagielski 
425*b1cdbd2cSJim Jagielski 		// Verify filter result
426*b1cdbd2cSJim Jagielski 		ColRowRange = (XColumnRowRange) UnoRuntime.queryInterface(XColumnRowRange.class, xdataRange.getCellRangeByName("A1:E6"));
427*b1cdbd2cSJim Jagielski 		Rows = ColRowRange.getRows();
428*b1cdbd2cSJim Jagielski 		for (int i = 0; i < Rows.getCount(); i++) {
429*b1cdbd2cSJim Jagielski 			Object aRowObj = Rows.getByIndex(i);
430*b1cdbd2cSJim Jagielski 			XPropertySet PropSet = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class, aRowObj);
431*b1cdbd2cSJim Jagielski 			if (i == 2 | i == 6) {
432*b1cdbd2cSJim Jagielski 				assertFalse("Expect should be false", (Boolean) PropSet.getPropertyValue("IsVisible"));
433*b1cdbd2cSJim Jagielski 			} else
434*b1cdbd2cSJim Jagielski 				assertTrue("Expect should be True", (Boolean) PropSet.getPropertyValue("IsVisible"));
435*b1cdbd2cSJim Jagielski 		}
436*b1cdbd2cSJim Jagielski 
437*b1cdbd2cSJim Jagielski 		// Save the document
438*b1cdbd2cSJim Jagielski 		SCUtil.save(scDocument);
439*b1cdbd2cSJim Jagielski 		SCUtil.closeFile(scDocument);
440*b1cdbd2cSJim Jagielski 		scDocument = SCUtil.openFile(sample, unoApp);
441*b1cdbd2cSJim Jagielski 
442*b1cdbd2cSJim Jagielski 		// Verify filter result again
443*b1cdbd2cSJim Jagielski 		xdataRange = (XCellRange) UnoRuntime.queryInterface(XCellRange.class, SCUtil.getCurrentSheet(scDocument));
444*b1cdbd2cSJim Jagielski 		ColRowRange = (XColumnRowRange) UnoRuntime.queryInterface(XColumnRowRange.class, xdataRange.getCellRangeByName("A1:E6"));
445*b1cdbd2cSJim Jagielski 		Rows = ColRowRange.getRows();
446*b1cdbd2cSJim Jagielski 		for (int i = 0; i < Rows.getCount() - 1; i++) {
447*b1cdbd2cSJim Jagielski 			Object aRowObj = Rows.getByIndex(i);
448*b1cdbd2cSJim Jagielski 			XPropertySet PropSet = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class, aRowObj);
449*b1cdbd2cSJim Jagielski 			if (i == 2 | i == 6) {
450*b1cdbd2cSJim Jagielski 				assertFalse("Expect should be false", (Boolean) PropSet.getPropertyValue("IsVisible"));
451*b1cdbd2cSJim Jagielski 			} else
452*b1cdbd2cSJim Jagielski 				assertTrue("Expect should be true", (Boolean) PropSet.getPropertyValue("IsVisible"));
453*b1cdbd2cSJim Jagielski 		}
454*b1cdbd2cSJim Jagielski 
455*b1cdbd2cSJim Jagielski 	}
456*b1cdbd2cSJim Jagielski 
457*b1cdbd2cSJim Jagielski 	/**
458*b1cdbd2cSJim Jagielski 	 * test standard filter with regular expressions in options
459*b1cdbd2cSJim Jagielski 	 */
460*b1cdbd2cSJim Jagielski 	@Test
testStandardFilterOptionUseRegularExpressions()461*b1cdbd2cSJim Jagielski 	public void testStandardFilterOptionUseRegularExpressions() throws Exception {
462*b1cdbd2cSJim Jagielski 		// Prepare test data
463*b1cdbd2cSJim Jagielski 		String sample = Testspace.prepareData(filename);
464*b1cdbd2cSJim Jagielski 		// Open document
465*b1cdbd2cSJim Jagielski 		scDocument = SCUtil.openFile(sample, unoApp);
466*b1cdbd2cSJim Jagielski 		// Get cell range
467*b1cdbd2cSJim Jagielski 		XCellRange xdataRange = (XCellRange) UnoRuntime.queryInterface(XCellRange.class, SCUtil.getCurrentSheet(scDocument));
468*b1cdbd2cSJim Jagielski 
469*b1cdbd2cSJim Jagielski 		// Set filter property and filter the cell range
470*b1cdbd2cSJim Jagielski 		XSheetFilterable xFilter = (XSheetFilterable) UnoRuntime.queryInterface(XSheetFilterable.class, xdataRange.getCellRangeByName("A1:F6"));
471*b1cdbd2cSJim Jagielski 		XSheetFilterDescriptor xFilterDesc = xFilter.createFilterDescriptor(true);
472*b1cdbd2cSJim Jagielski 		TableFilterField[] aFilterFields = new TableFilterField[1];
473*b1cdbd2cSJim Jagielski 		aFilterFields[0] = new TableFilterField();
474*b1cdbd2cSJim Jagielski 		aFilterFields[0].Field = 0;
475*b1cdbd2cSJim Jagielski 		aFilterFields[0].IsNumeric = false;
476*b1cdbd2cSJim Jagielski 		aFilterFields[0].Operator = FilterOperator.EQUAL;
477*b1cdbd2cSJim Jagielski 		aFilterFields[0].StringValue = "^.{3}$";
478*b1cdbd2cSJim Jagielski 		xFilterDesc.setFilterFields(aFilterFields);
479*b1cdbd2cSJim Jagielski 		XPropertySet xFilterProp = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class, xFilterDesc);
480*b1cdbd2cSJim Jagielski 		xFilterProp.setPropertyValue("ContainsHeader", new Boolean(true));
481*b1cdbd2cSJim Jagielski 		xFilterProp.setPropertyValue("UseRegularExpressions", new Boolean(true));
482*b1cdbd2cSJim Jagielski 		xFilter.filter(xFilterDesc);
483*b1cdbd2cSJim Jagielski 
484*b1cdbd2cSJim Jagielski 		// Verify filter result
485*b1cdbd2cSJim Jagielski 		XColumnRowRange ColRowRange = (XColumnRowRange) UnoRuntime.queryInterface(XColumnRowRange.class, xdataRange.getCellRangeByName("A1:F6"));
486*b1cdbd2cSJim Jagielski 		XTableRows Rows = ColRowRange.getRows();
487*b1cdbd2cSJim Jagielski 		for (int i = 0; i < Rows.getCount(); i++) {
488*b1cdbd2cSJim Jagielski 			Object aRowObj = Rows.getByIndex(i);
489*b1cdbd2cSJim Jagielski 			XPropertySet PropSet = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class, aRowObj);
490*b1cdbd2cSJim Jagielski 			if (i == 2 | i == 4) {
491*b1cdbd2cSJim Jagielski 				assertFalse("Expect should be false", (Boolean) PropSet.getPropertyValue("IsVisible"));
492*b1cdbd2cSJim Jagielski 			} else
493*b1cdbd2cSJim Jagielski 				assertTrue("Expect should be true", (Boolean) PropSet.getPropertyValue("IsVisible"));
494*b1cdbd2cSJim Jagielski 		}
495*b1cdbd2cSJim Jagielski 
496*b1cdbd2cSJim Jagielski 		// Save the document
497*b1cdbd2cSJim Jagielski 		SCUtil.save(scDocument);
498*b1cdbd2cSJim Jagielski 		SCUtil.closeFile(scDocument);
499*b1cdbd2cSJim Jagielski 		scDocument = SCUtil.openFile(sample, unoApp);
500*b1cdbd2cSJim Jagielski 
501*b1cdbd2cSJim Jagielski 		// Verify filter result again
502*b1cdbd2cSJim Jagielski 		xdataRange = (XCellRange) UnoRuntime.queryInterface(XCellRange.class, SCUtil.getCurrentSheet(scDocument));
503*b1cdbd2cSJim Jagielski 		ColRowRange = (XColumnRowRange) UnoRuntime.queryInterface(XColumnRowRange.class, xdataRange.getCellRangeByName("A1:F6"));
504*b1cdbd2cSJim Jagielski 		Rows = ColRowRange.getRows();
505*b1cdbd2cSJim Jagielski 		for (int i = 0; i < Rows.getCount(); i++) {
506*b1cdbd2cSJim Jagielski 			Object aRowObj = Rows.getByIndex(i);
507*b1cdbd2cSJim Jagielski 			XPropertySet PropSet = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class, aRowObj);
508*b1cdbd2cSJim Jagielski 			if (i == 2 | i == 4) {
509*b1cdbd2cSJim Jagielski 				assertFalse("Expect should be false", (Boolean) PropSet.getPropertyValue("IsVisible"));
510*b1cdbd2cSJim Jagielski 			} else
511*b1cdbd2cSJim Jagielski 				assertTrue("Expect should be true", (Boolean) PropSet.getPropertyValue("IsVisible"));
512*b1cdbd2cSJim Jagielski 		}
513*b1cdbd2cSJim Jagielski 
514*b1cdbd2cSJim Jagielski 	}
515*b1cdbd2cSJim Jagielski 
516*b1cdbd2cSJim Jagielski }
517