bump product version to 6.4.0.3
[LibreOffice.git] / test / source / sheet / xsheetoutline.cxx
blobe8d829b8d1c3285492fbe2a337c9ebd0eaa00b11
1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 /*
3 * This file is part of the LibreOffice project.
5 * This Source Code Form is subject to the terms of the Mozilla Public
6 * License, v. 2.0. If a copy of the MPL was not distributed with this
7 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 */
10 #include <test/sheet/xsheetoutline.hxx>
12 #include <com/sun/star/sheet/XSpreadsheet.hpp>
13 #include <com/sun/star/table/CellRangeAddress.hpp>
14 #include <com/sun/star/table/XCellRange.hpp>
16 #include <com/sun/star/sheet/XCellRangeAddressable.hpp>
17 #include <com/sun/star/table/TableOrientation.hpp>
19 #include <com/sun/star/sheet/XSheetCellRanges.hpp>
20 #include <com/sun/star/sheet/XSheetOutline.hpp>
21 #include <com/sun/star/sheet/XCellRangesQuery.hpp>
23 #include <cppunit/extensions/HelperMacros.h>
24 #include <rtl/ustring.hxx>
26 using namespace css;
27 using namespace css::uno;
29 namespace apitest {
31 const OUString colLevel1 = "OutlineSheet.A1:Z1";
32 const OUString colLevel2 = "OutlineSheet.C1:W1";
33 const OUString colLevel3 = "OutlineSheet.E1:U1";
34 const OUString colLevel4 = "OutlineSheet.G1:S1";
36 const OUString rowLevel1 = "OutlineSheet.A1:A30";
37 const OUString rowLevel2 = "OutlineSheet.A3:A27";
38 const OUString rowLevel3 = "OutlineSheet.A5:A24";
39 const OUString rowLevel4 = "OutlineSheet.A7:A21";
41 static OUString getVisibleAdress(
42 uno::Reference<sheet::XSpreadsheet> const& xSheet,
43 const OUString& aLevelRangeString)
46 uno::Reference<table::XCellRange> aSheetRangeAccess(xSheet, UNO_QUERY_THROW);
47 uno::Reference<table::XCellRange> aLevelRange = aSheetRangeAccess->getCellRangeByName(aLevelRangeString);
49 uno::Reference<sheet::XCellRangesQuery> xCellRangesQuery(aLevelRange,UNO_QUERY_THROW);
50 uno::Reference<sheet::XSheetCellRanges> xRanges = xCellRangesQuery->queryVisibleCells();
51 OUString aResult = xRanges->getRangeAddressesAsString();
53 return aResult;
57 static table::CellRangeAddress getAddressFromRangeString(
58 uno::Reference<sheet::XSpreadsheet> const& xSheet,
59 const OUString& aStringAddress)
62 uno::Reference< table::XCellRange > aSheetRangeAccess(xSheet, UNO_QUERY_THROW);
63 uno::Reference<table::XCellRange> aRange = aSheetRangeAccess->getCellRangeByName(aStringAddress);
65 uno::Reference<sheet::XCellRangeAddressable> xCellRangeAddressable(aRange, UNO_QUERY_THROW);
66 table::CellRangeAddress aLevelRangeAddress = xCellRangeAddressable->getRangeAddress();
68 return aLevelRangeAddress;
72 void XSheetOutline::testHideDetail()
75 uno::Reference< sheet::XSpreadsheet > aSheet(init(), UNO_QUERY_THROW);
76 uno::Reference< sheet::XSheetOutline > aSheetOutline(aSheet, UNO_QUERY_THROW);
78 // Column level 2
79 table::CellRangeAddress aLevelRangeAddress = getAddressFromRangeString(aSheet, colLevel2);
80 aSheetOutline->hideDetail(aLevelRangeAddress);
82 CPPUNIT_ASSERT_EQUAL_MESSAGE("Column level 2 not hidden",
83 getVisibleAdress(aSheet, colLevel2), OUString());
85 // Row Level 2
86 aLevelRangeAddress = getAddressFromRangeString(aSheet, rowLevel2);
87 aSheetOutline->hideDetail(aLevelRangeAddress);
89 CPPUNIT_ASSERT_EQUAL_MESSAGE("Row level 2 not hidden",
90 getVisibleAdress(aSheet, rowLevel2), OUString());
94 void XSheetOutline::testShowDetail()
96 uno::Reference< sheet::XSpreadsheet > aSheet(init(), UNO_QUERY_THROW);
97 uno::Reference< sheet::XSheetOutline > aSheetOutline(aSheet, UNO_QUERY_THROW);
99 aSheetOutline->showDetail(getAddressFromRangeString(aSheet, colLevel1));
100 aSheetOutline->showDetail(getAddressFromRangeString(aSheet, rowLevel1));
102 // Row Level 2
103 table::CellRangeAddress aLevelRangeAddress = getAddressFromRangeString(aSheet, rowLevel2);
104 aSheetOutline->showDetail(aLevelRangeAddress);
106 CPPUNIT_ASSERT_EQUAL_MESSAGE("Row level 2 still hidden",
107 getVisibleAdress(aSheet, rowLevel2), rowLevel2);
109 // Column Level 2
110 aLevelRangeAddress = getAddressFromRangeString(aSheet, colLevel2);
111 aSheetOutline->showDetail(aLevelRangeAddress);
113 CPPUNIT_ASSERT_EQUAL_MESSAGE("Column level 2 still hidden",
114 getVisibleAdress(aSheet, colLevel2), colLevel2);
118 void XSheetOutline::testShowLevel()
121 uno::Reference< sheet::XSpreadsheet > aSheet(init(), UNO_QUERY_THROW);
122 uno::Reference< sheet::XSheetOutline > aSheetOutline(aSheet, UNO_QUERY_THROW);
124 // test columns
126 table::CellRangeAddress aLevel1 = getAddressFromRangeString(aSheet, colLevel1);
127 table::CellRangeAddress aLevel2 = getAddressFromRangeString(aSheet, colLevel2);
128 table::CellRangeAddress aLevel3 = getAddressFromRangeString(aSheet, colLevel3);
129 table::CellRangeAddress aLevel4 = getAddressFromRangeString(aSheet, colLevel4);
131 aSheetOutline->showDetail(getAddressFromRangeString(aSheet, colLevel1));
132 aSheetOutline->showDetail(getAddressFromRangeString(aSheet, colLevel2));
133 aSheetOutline->showDetail(getAddressFromRangeString(aSheet, rowLevel1));
135 aSheetOutline->hideDetail(aLevel1);
136 aSheetOutline->hideDetail(aLevel2);
137 aSheetOutline->hideDetail(aLevel3);
138 aSheetOutline->hideDetail(aLevel4);
140 aSheetOutline->showLevel(2, table::TableOrientation_COLUMNS);
142 std::cout << " verify showLevel col apres" << getVisibleAdress(aSheet, "OutlineSheet.A1:Z30") << std::endl;
144 // verify that level 2 and level 1 are shown --> column 0..3 & column 22..26
145 // level 3 & 4 are hidden --> column 4..19
147 CPPUNIT_ASSERT_EQUAL_MESSAGE("testShowLevel Column", OUString("OutlineSheet.A1:D1"), getVisibleAdress(aSheet, "OutlineSheet.A1:D1"));
148 CPPUNIT_ASSERT_EQUAL_MESSAGE("testShowLevel Column", OUString("OutlineSheet.V1:Z1"), getVisibleAdress(aSheet, "OutlineSheet.V1:Z1"));
149 CPPUNIT_ASSERT_EQUAL_MESSAGE("testShowLevel Column", OUString(), getVisibleAdress(aSheet, colLevel3));
151 /* FIXME !!
153 // test Rows
155 aLevel1 = getAddressFromRangeString(rowLevel1);
156 aLevel2 = getAddressFromRangeString(rowLevel2);
157 aLevel3 = getAddressFromRangeString(rowLevel3);
158 aLevel4 = getAddressFromRangeString(rowLevel4);
160 aSheetOutline->showDetail(getAddressFromRangeString(colLevel1));
161 aSheetOutline->showDetail(getAddressFromRangeString(rowLevel1));
162 aSheetOutline->showDetail(getAddressFromRangeString(rowLevel2));
164 std::cout << " verify showLevel row avant" << OUStringToOString(getVisibleAdress("OutlineSheet.A1:Z30"), RTL_TEXTENCODING_UTF8).getStr() << std::endl;
166 aSheetOutline->hideDetail(aLevel1);
167 aSheetOutline->hideDetail(aLevel2);
168 aSheetOutline->hideDetail(aLevel3);
169 aSheetOutline->hideDetail(aLevel4);
171 std::cout << " verify showLevel row juste avant" << OUStringToOString(getVisibleAdress("OutlineSheet.A1:Z30"), RTL_TEXTENCODING_UTF8).getStr() << std::endl;
173 aSheetOutline->showLevel(2, table::TableOrientation_ROWS);
175 std::cout << " verify showLevel row apres" << OUStringToOString(getVisibleAdress("OutlineSheet.A1:Z30"), RTL_TEXTENCODING_UTF8).getStr() << std::endl;
177 // verify rows visible 0..3 & 24..29
178 // verfiy rows hidden 4..23
180 CPPUNIT_ASSERT_EQUAL_MESSAGE("testShowLevel Row", OUString("OutlineSheet.A1:A4"), getVisibleAdress("OutlineSheet.A1:A4"));
181 CPPUNIT_ASSERT_EQUAL_MESSAGE("testShowLevel Row", OUString("OutlineSheet.A25:A30"), getVisibleAdress("OutlineSheet.A25:A30"));
182 CPPUNIT_ASSERT_EQUAL_MESSAGE("testShowLevel Row", OUString(), getVisibleAdress(rowLevel3));
188 void XSheetOutline::testGroup()
191 uno::Reference< sheet::XSpreadsheet > aSheet(init(), UNO_QUERY_THROW);
192 uno::Reference< sheet::XSheetOutline > aSheetOutline(aSheet, UNO_QUERY_THROW);
194 // Column level 2
195 OUString aNewString = "OutlineSheet.AB1:AG1";
196 table::CellRangeAddress aLevelRangeAddress = getAddressFromRangeString(aSheet, aNewString);
197 aSheetOutline->group(aLevelRangeAddress, table::TableOrientation_COLUMNS);
199 aSheetOutline->hideDetail(aLevelRangeAddress);
201 CPPUNIT_ASSERT_EQUAL_MESSAGE("testGroup Column still visible", getVisibleAdress(aSheet, aNewString), OUString());
203 // Row Level 2
204 aNewString = "OutlineSheet.A50:A60";
205 aLevelRangeAddress = getAddressFromRangeString(aSheet, aNewString);
206 aSheetOutline->group(aLevelRangeAddress, table::TableOrientation_ROWS);
208 aSheetOutline->hideDetail(aLevelRangeAddress);
210 CPPUNIT_ASSERT_EQUAL_MESSAGE("testGroup Row still visible", getVisibleAdress(aSheet, aNewString), OUString());
214 void XSheetOutline::testUngroup()
216 uno::Reference< sheet::XSpreadsheet > aSheet(init(), UNO_QUERY_THROW);
217 uno::Reference< sheet::XSheetOutline > aSheetOutline(aSheet, UNO_QUERY_THROW);
219 // New Column level
220 OUString aNewString = "OutlineSheet.BB1:BG1";
221 table::CellRangeAddress aLevelRangeAddress = getAddressFromRangeString(aSheet, aNewString);
222 aSheetOutline->group(aLevelRangeAddress, table::TableOrientation_COLUMNS);
223 aSheetOutline->hideDetail(aLevelRangeAddress);
225 aSheetOutline->ungroup(aLevelRangeAddress, table::TableOrientation_COLUMNS);
227 aSheetOutline->showDetail(aLevelRangeAddress);
228 // should remain hidden ?
230 CPPUNIT_ASSERT_EQUAL_MESSAGE("testUnGroup Column becomes visible after ungroup", getVisibleAdress(aSheet, aNewString), OUString());
232 // New Row level
233 aNewString = "OutlineSheet.A70:A80";
234 aLevelRangeAddress = getAddressFromRangeString(aSheet, aNewString);
235 aSheetOutline->group(aLevelRangeAddress, table::TableOrientation_ROWS);
236 aSheetOutline->hideDetail(aLevelRangeAddress);
238 aSheetOutline->ungroup(aLevelRangeAddress, table::TableOrientation_ROWS);
240 aSheetOutline->showDetail(aLevelRangeAddress);
241 // should remain hidden ?
243 CPPUNIT_ASSERT_EQUAL_MESSAGE("testUnGroup Row becomes visible after ungroup", getVisibleAdress(aSheet, aNewString), OUString());
247 void XSheetOutline::testClearOutline()
249 uno::Reference< sheet::XSpreadsheet > aSheet(init(), UNO_QUERY_THROW);
250 uno::Reference< sheet::XSheetOutline > aSheetOutline(aSheet, UNO_QUERY_THROW);
252 aSheetOutline->clearOutline();
254 table::CellRangeAddress aLevelRangeAddress = getAddressFromRangeString(aSheet, colLevel1);
255 aSheetOutline->hideDetail(aLevelRangeAddress);
256 aLevelRangeAddress = getAddressFromRangeString(aSheet, rowLevel1);
257 aSheetOutline->hideDetail(aLevelRangeAddress);
259 CPPUNIT_ASSERT_EQUAL_MESSAGE("testClearOutline Columns are hidden after clear", getVisibleAdress(aSheet, colLevel1), colLevel1);
260 CPPUNIT_ASSERT_EQUAL_MESSAGE("testClearOutline Rows are hidden after clear", getVisibleAdress(aSheet, rowLevel1), rowLevel1);
266 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */