1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
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/.
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>
27 using namespace css::uno
;
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();
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
);
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());
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
));
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
);
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
);
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
));
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
);
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());
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
);
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());
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: */