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