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/xsheetannotations.hxx>
12 #include <com/sun/star/table/CellAddress.hpp>
13 #include <com/sun/star/container/XIndexAccess.hpp>
14 #include <com/sun/star/sheet/XSheetAnnotation.hpp>
15 #include <com/sun/star/text/XTextRange.hpp>
17 #include "cppunit/extensions/HelperMacros.h"
18 #include <rtl/ustring.hxx>
21 using namespace css::uno
;
25 void XSheetAnnotations::testCount()
27 uno::Reference
< sheet::XSheetAnnotations
> aSheetAnnotations (init(), UNO_QUERY_THROW
);
29 // count on sheet 1 before inserting
30 uno::Reference
< container::XIndexAccess
> xAnnotationsIndex (aSheetAnnotations
, UNO_QUERY_THROW
);
31 sal_Int32 nBefore
= xAnnotationsIndex
->getCount();
33 // get Sheet 2 annotations
34 uno::Reference
< sheet::XSheetAnnotations
> xSheet2Annotations( getAnnotations(1), UNO_QUERY_THROW
);
36 // insert a note on sheet 2
37 table::CellAddress
xTargetCellAddress (1,0,0);
38 xSheet2Annotations
->insertNew(xTargetCellAddress
, "an inserted annotation on sheet 2");
40 // count again on sheet 1
41 sal_Int32 nAfter
= xAnnotationsIndex
->getCount();
43 CPPUNIT_ASSERT_EQUAL_MESSAGE( "Annotations count should not change on sheet 1", nBefore
, nAfter
);
46 void XSheetAnnotations::testInsertNew()
48 uno::Reference
< sheet::XSheetAnnotations
> aSheetAnnotations (init(), UNO_QUERY_THROW
);
50 // count before inserting
51 uno::Reference
< container::XIndexAccess
> xAnnotationsIndex (aSheetAnnotations
, UNO_QUERY_THROW
);
52 sal_Int32 nBefore
= xAnnotationsIndex
->getCount();
54 CPPUNIT_ASSERT_EQUAL_MESSAGE(
55 "There should already be one note", sal_Int32(1), nBefore
);
57 // insert the annotation
58 table::CellAddress
xTargetCellAddress (0,3,4);
59 aSheetAnnotations
->insertNew(xTargetCellAddress
, "an inserted annotation");
61 // count after inserting
62 //uno::Reference< container::XIndexAccess > xAnnotationsIndexAfter (aSheetAnnotations, UNO_QUERY_THROW);
63 sal_Int32 nAfter
= xAnnotationsIndex
->getCount();
65 CPPUNIT_ASSERT_EQUAL_MESSAGE(
66 "Annotations index not updated", nBefore
+ 1, nAfter
);
68 // is the position ok ?
69 uno::Reference
< sheet::XSheetAnnotation
> aLastSheetAnnotation (xAnnotationsIndex
->getByIndex(nAfter
-1), UNO_QUERY_THROW
);
70 table::CellAddress xResultCellAddress
= aLastSheetAnnotation
->getPosition();
72 CPPUNIT_ASSERT_EQUAL_MESSAGE(
73 "Insert Annotation - Wrong SHEET reference position",
74 xTargetCellAddress
.Sheet
, xResultCellAddress
.Sheet
);
75 CPPUNIT_ASSERT_EQUAL_MESSAGE(
76 "Insert Annotation - Wrong COLUMN reference position",
77 xTargetCellAddress
.Column
, xResultCellAddress
.Column
);
78 CPPUNIT_ASSERT_EQUAL_MESSAGE(
79 "Insert Annotation - Wrong ROW reference position",
80 xTargetCellAddress
.Row
, xResultCellAddress
.Row
);
83 uno::Reference
< text::XTextRange
> aTextSheetAnnotation(aLastSheetAnnotation
, UNO_QUERY_THROW
);
84 OUString aString
= aTextSheetAnnotation
->getString();
86 CPPUNIT_ASSERT_EQUAL_MESSAGE(
87 "Insert Annotation - Wrong string", OUString("an inserted annotation"),
92 void XSheetAnnotations::testRemoveByIndex()
94 uno::Reference
< sheet::XSheetAnnotations
> aSheetAnnotations (init(), UNO_QUERY_THROW
);
96 // insert some annotations
97 table::CellAddress
xTargetCellAddress (0,4,5);
98 aSheetAnnotations
->insertNew(xTargetCellAddress
, "an inserted annotation 1");
99 table::CellAddress
xToBeRemovedCellAddress (0,5,6);
100 aSheetAnnotations
->insertNew(xToBeRemovedCellAddress
, "an inserted annotation 2");
101 table::CellAddress
xOtherCellAddress (0,7,8);
102 aSheetAnnotations
->insertNew(xOtherCellAddress
, "an inserted annotation 3");
104 // count before removing
105 uno::Reference
< container::XIndexAccess
> xAnnotationsIndex (aSheetAnnotations
, UNO_QUERY_THROW
);
106 sal_Int32 nBefore
= xAnnotationsIndex
->getCount();
108 // remove the xToBeRemovedCellAddress
109 aSheetAnnotations
->removeByIndex(nBefore
-2);
111 // count after removing
112 //uno::Reference< container::XIndexAccess > xAnnotationsIndex (aSheetAnnotations, UNO_QUERY_THROW);
113 sal_Int32 nAfter
= xAnnotationsIndex
->getCount();
115 // the last position should be xOtherCellAddress
116 uno::Reference
< sheet::XSheetAnnotation
> aLastSheetAnnotation (xAnnotationsIndex
->getByIndex(nAfter
-1), UNO_QUERY_THROW
);
117 table::CellAddress xResultCellAddress
= aLastSheetAnnotation
->getPosition();
119 CPPUNIT_ASSERT_EQUAL_MESSAGE(
120 "Remove Annotation - Wrong SHEET reference position",
121 xOtherCellAddress
.Sheet
, xResultCellAddress
.Sheet
);
122 CPPUNIT_ASSERT_EQUAL_MESSAGE(
123 "Remove Annotation - Wrong COLUMN reference position",
124 xOtherCellAddress
.Column
, xResultCellAddress
.Column
);
125 CPPUNIT_ASSERT_EQUAL_MESSAGE(
126 "Remove Annotation - Wrong ROW reference position",
127 xOtherCellAddress
.Row
, xResultCellAddress
.Row
);
129 // is the string ok ?
130 uno::Reference
< text::XTextRange
> aLastTextSheetAnnotation(aLastSheetAnnotation
, UNO_QUERY_THROW
);
131 OUString aLastString
= aLastTextSheetAnnotation
->getString();
133 CPPUNIT_ASSERT_EQUAL_MESSAGE(
134 "Remove Annotation - Wrong string",
135 OUString("an inserted annotation 3"), aLastString
);
137 // the previous should be xTargetCellAddress
138 uno::Reference
< sheet::XSheetAnnotation
> aPreviousSheetAnnotation (xAnnotationsIndex
->getByIndex(nAfter
-2), UNO_QUERY_THROW
);
139 table::CellAddress xPreviousCellAddress
= aPreviousSheetAnnotation
->getPosition();
141 CPPUNIT_ASSERT_EQUAL_MESSAGE(
142 "Remove Annotation - Wrong SHEET reference position",
143 xTargetCellAddress
.Sheet
, xPreviousCellAddress
.Sheet
);
144 CPPUNIT_ASSERT_EQUAL_MESSAGE(
145 "Remove Annotation - Wrong COLUMN reference position",
146 xTargetCellAddress
.Column
, xPreviousCellAddress
.Column
);
147 CPPUNIT_ASSERT_EQUAL_MESSAGE(
148 "Remove Annotation - Wrong ROW reference position",
149 xTargetCellAddress
.Row
, xPreviousCellAddress
.Row
);
151 // is the string ok ?
152 uno::Reference
< text::XTextRange
> aPreviousTextSheetAnnotation(aPreviousSheetAnnotation
, UNO_QUERY_THROW
);
153 OUString aPreviousString
= aPreviousTextSheetAnnotation
->getString();
155 CPPUNIT_ASSERT_EQUAL_MESSAGE(
156 "Remove Annotation - Wrong string",
157 OUString("an inserted annotation 1"), aPreviousString
);
160 void XSheetAnnotations::testGetByIndex()
163 // testing #fdo80551 - getByIndex not on the first sheet
165 // insert annotations in first sheet
166 uno::Reference
< sheet::XSheetAnnotations
> aSheet0Annotations (init(), UNO_QUERY_THROW
);
167 table::CellAddress
xTargetCellAddress0 (0,0,1);
168 aSheet0Annotations
->insertNew(xTargetCellAddress0
, "an inserted annotation 1 on sheet 1");
169 table::CellAddress
xSecondTargetCellAddress0 (0,0,2);
170 aSheet0Annotations
->insertNew(xSecondTargetCellAddress0
, "an inserted annotation 2 on sheet 1");
171 table::CellAddress
xThirdCellAddress0 (0,0,3);
172 aSheet0Annotations
->insertNew(xThirdCellAddress0
, "an inserted annotation 3 on sheet 1");
174 // insert annotations in third sheet
175 uno::Reference
< sheet::XSheetAnnotations
> aSheet2Annotations (getAnnotations(2), UNO_QUERY_THROW
);
176 table::CellAddress
xTargetCellAddress2 (2,4,5);
177 aSheet2Annotations
->insertNew(xTargetCellAddress2
, "an inserted annotation 1 on sheet 3");
178 table::CellAddress
xSecondTargetCellAddress2 (2,5,6);
179 aSheet2Annotations
->insertNew(xSecondTargetCellAddress2
, "an inserted annotation 2 on sheet 3");
180 table::CellAddress
xThirdCellAddress2 (2,7,8);
181 aSheet2Annotations
->insertNew(xThirdCellAddress2
, "an inserted annotation 3 on sheet 3");
183 // get second annotation for second sheet
184 uno::Reference
< sheet::XSheetAnnotations
> aSheetAnnotations (getAnnotations(2), UNO_QUERY_THROW
);
185 uno::Reference
< container::XIndexAccess
> xAnnotationsIndex (aSheetAnnotations
, UNO_QUERY_THROW
);
186 uno::Reference
< sheet::XSheetAnnotation
> aAnnotation (xAnnotationsIndex
->getByIndex(1), UNO_QUERY_THROW
);
188 table::CellAddress xToBeAnalyzedCellAddress
= aAnnotation
->getPosition();
190 // is the CellAddress ok ?
191 CPPUNIT_ASSERT_EQUAL_MESSAGE(
192 "GetByIndex Annotation - Wrong SHEET reference position",
193 xSecondTargetCellAddress2
.Sheet
, xToBeAnalyzedCellAddress
.Sheet
);
194 CPPUNIT_ASSERT_EQUAL_MESSAGE(
195 "GetByIndex Annotation - Wrong COLUMN reference position",
196 xSecondTargetCellAddress2
.Column
, xToBeAnalyzedCellAddress
.Column
);
197 CPPUNIT_ASSERT_EQUAL_MESSAGE(
198 "GetByIndex Annotation - Wrong ROW reference position",
199 xSecondTargetCellAddress2
.Row
, xToBeAnalyzedCellAddress
.Row
);
201 // is the string ok ?
202 uno::Reference
< text::XTextRange
> aTextSheetAnnotation(aAnnotation
, UNO_QUERY_THROW
);
203 OUString aString
= aTextSheetAnnotation
->getString();
205 CPPUNIT_ASSERT_EQUAL_MESSAGE(
206 "GetByIndex Annotation - Wrong string",
207 OUString("an inserted annotation 2 on sheet 3"), aString
);
212 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */