Line data Source code
1 : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 : /*
3 : * This file is part of the LibreOffice project.
4 : *
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 : */
9 :
10 : #include <test/sheet/xsheetannotations.hxx>
11 :
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>
16 :
17 : #include "cppunit/extensions/HelperMacros.h"
18 : #include <rtl/ustring.hxx>
19 :
20 : using namespace css;
21 : using namespace css::uno;
22 :
23 : namespace apitest {
24 :
25 1 : void XSheetAnnotations::testCount()
26 : {
27 1 : uno::Reference< sheet::XSheetAnnotations > aSheetAnnotations (init(), UNO_QUERY_THROW);
28 :
29 : // count on sheet 1 before inserting
30 2 : uno::Reference< container::XIndexAccess > xAnnotationsIndex (aSheetAnnotations, UNO_QUERY_THROW);
31 1 : sal_Int32 nBefore = xAnnotationsIndex->getCount();
32 :
33 : // get Sheet 2 annotations
34 2 : uno::Reference< sheet::XSheetAnnotations > xSheet2Annotations( getAnnotations(1), UNO_QUERY_THROW);
35 :
36 : // insert a note on sheet 2
37 1 : table::CellAddress xTargetCellAddress (1,0,0);
38 1 : xSheet2Annotations->insertNew(xTargetCellAddress, "an inserted annotation on sheet 2");
39 :
40 : // count again on sheet 1
41 1 : sal_Int32 nAfter = xAnnotationsIndex->getCount();
42 :
43 2 : CPPUNIT_ASSERT_EQUAL_MESSAGE( "Annotations count should not change on sheet 1", nBefore, nAfter);
44 1 : }
45 :
46 1 : void XSheetAnnotations::testInsertNew()
47 : {
48 1 : uno::Reference< sheet::XSheetAnnotations > aSheetAnnotations (init(), UNO_QUERY_THROW);
49 :
50 : // count before inserting
51 2 : uno::Reference< container::XIndexAccess > xAnnotationsIndex (aSheetAnnotations, UNO_QUERY_THROW);
52 1 : sal_Int32 nBefore = xAnnotationsIndex->getCount();
53 :
54 2 : CPPUNIT_ASSERT_EQUAL_MESSAGE(
55 1 : "There should already be one note", sal_Int32(1), nBefore );
56 :
57 : // insert the annotation
58 1 : table::CellAddress xTargetCellAddress (0,3,4);
59 1 : aSheetAnnotations->insertNew(xTargetCellAddress, "an inserted annotation");
60 :
61 : // count after inserting
62 : //uno::Reference< container::XIndexAccess > xAnnotationsIndexAfter (aSheetAnnotations, UNO_QUERY_THROW);
63 1 : sal_Int32 nAfter = xAnnotationsIndex->getCount();
64 :
65 2 : CPPUNIT_ASSERT_EQUAL_MESSAGE(
66 1 : "Annotations index not updated", nBefore + 1, nAfter);
67 :
68 : // is the position ok ?
69 2 : uno::Reference< sheet::XSheetAnnotation > aLastSheetAnnotation (xAnnotationsIndex->getByIndex(nAfter-1), UNO_QUERY_THROW);
70 1 : table::CellAddress xResultCellAddress = aLastSheetAnnotation->getPosition();
71 :
72 2 : CPPUNIT_ASSERT_EQUAL_MESSAGE(
73 : "Insert Annotation - Wrong SHEET reference position",
74 1 : xTargetCellAddress.Sheet, xResultCellAddress.Sheet);
75 2 : CPPUNIT_ASSERT_EQUAL_MESSAGE(
76 : "Insert Annotation - Wrong COLUMN reference position",
77 1 : xTargetCellAddress.Column, xResultCellAddress.Column);
78 2 : CPPUNIT_ASSERT_EQUAL_MESSAGE(
79 : "Insert Annotation - Wrong ROW reference position",
80 1 : xTargetCellAddress.Row, xResultCellAddress.Row);
81 :
82 : // is the string ok ?
83 2 : uno::Reference< text::XTextRange > aTextSheetAnnotation(aLastSheetAnnotation, UNO_QUERY_THROW);
84 2 : OUString aString = aTextSheetAnnotation->getString();
85 :
86 2 : CPPUNIT_ASSERT_EQUAL_MESSAGE(
87 : "Insert Annotation - Wrong string", OUString("an inserted annotation"),
88 2 : aString);
89 :
90 1 : }
91 :
92 1 : void XSheetAnnotations::testRemoveByIndex()
93 : {
94 1 : uno::Reference< sheet::XSheetAnnotations > aSheetAnnotations (init(), UNO_QUERY_THROW);
95 :
96 : // insert some annotations
97 1 : table::CellAddress xTargetCellAddress (0,4,5);
98 1 : aSheetAnnotations->insertNew(xTargetCellAddress, "an inserted annotation 1");
99 1 : table::CellAddress xToBeRemovedCellAddress (0,5,6);
100 1 : aSheetAnnotations->insertNew(xToBeRemovedCellAddress, "an inserted annotation 2");
101 1 : table::CellAddress xOtherCellAddress (0,7,8);
102 1 : aSheetAnnotations->insertNew(xOtherCellAddress, "an inserted annotation 3");
103 :
104 : // count before removing
105 2 : uno::Reference< container::XIndexAccess > xAnnotationsIndex (aSheetAnnotations, UNO_QUERY_THROW);
106 1 : sal_Int32 nBefore = xAnnotationsIndex->getCount();
107 :
108 : // remove the xToBeRemovedCellAddress
109 1 : aSheetAnnotations->removeByIndex(nBefore-2);
110 :
111 : // count after removing
112 : //uno::Reference< container::XIndexAccess > xAnnotationsIndex (aSheetAnnotations, UNO_QUERY_THROW);
113 1 : sal_Int32 nAfter = xAnnotationsIndex->getCount();
114 :
115 : // the last position should be xOtherCellAddress
116 2 : uno::Reference< sheet::XSheetAnnotation > aLastSheetAnnotation (xAnnotationsIndex->getByIndex(nAfter-1), UNO_QUERY_THROW);
117 1 : table::CellAddress xResultCellAddress = aLastSheetAnnotation->getPosition();
118 :
119 2 : CPPUNIT_ASSERT_EQUAL_MESSAGE(
120 : "Remove Annotation - Wrong SHEET reference position",
121 1 : xOtherCellAddress.Sheet, xResultCellAddress.Sheet);
122 2 : CPPUNIT_ASSERT_EQUAL_MESSAGE(
123 : "Remove Annotation - Wrong COLUMN reference position",
124 1 : xOtherCellAddress.Column, xResultCellAddress.Column);
125 2 : CPPUNIT_ASSERT_EQUAL_MESSAGE(
126 : "Remove Annotation - Wrong ROW reference position",
127 1 : xOtherCellAddress.Row, xResultCellAddress.Row);
128 :
129 : // is the string ok ?
130 2 : uno::Reference< text::XTextRange > aLastTextSheetAnnotation(aLastSheetAnnotation, UNO_QUERY_THROW);
131 2 : OUString aLastString = aLastTextSheetAnnotation->getString();
132 :
133 2 : CPPUNIT_ASSERT_EQUAL_MESSAGE(
134 : "Remove Annotation - Wrong string",
135 1 : OUString("an inserted annotation 3"), aLastString);
136 :
137 : // the previous should be xTargetCellAddress
138 2 : uno::Reference< sheet::XSheetAnnotation > aPreviousSheetAnnotation (xAnnotationsIndex->getByIndex(nAfter-2), UNO_QUERY_THROW);
139 1 : table::CellAddress xPreviousCellAddress = aPreviousSheetAnnotation->getPosition();
140 :
141 2 : CPPUNIT_ASSERT_EQUAL_MESSAGE(
142 : "Remove Annotation - Wrong SHEET reference position",
143 1 : xTargetCellAddress.Sheet, xPreviousCellAddress.Sheet);
144 2 : CPPUNIT_ASSERT_EQUAL_MESSAGE(
145 : "Remove Annotation - Wrong COLUMN reference position",
146 1 : xTargetCellAddress.Column, xPreviousCellAddress.Column);
147 2 : CPPUNIT_ASSERT_EQUAL_MESSAGE(
148 : "Remove Annotation - Wrong ROW reference position",
149 1 : xTargetCellAddress.Row, xPreviousCellAddress.Row);
150 :
151 : // is the string ok ?
152 2 : uno::Reference< text::XTextRange > aPreviousTextSheetAnnotation(aPreviousSheetAnnotation, UNO_QUERY_THROW);
153 2 : OUString aPreviousString = aPreviousTextSheetAnnotation->getString();
154 :
155 2 : CPPUNIT_ASSERT_EQUAL_MESSAGE(
156 : "Remove Annotation - Wrong string",
157 2 : OUString("an inserted annotation 1"), aPreviousString);
158 1 : }
159 :
160 1 : void XSheetAnnotations::testGetByIndex()
161 : {
162 :
163 : // testing #fdo80551 - getByIndex not on the first sheet
164 :
165 : // insert annotations in first sheet
166 1 : uno::Reference< sheet::XSheetAnnotations > aSheet0Annotations (init(), UNO_QUERY_THROW);
167 1 : table::CellAddress xTargetCellAddress0 (0,0,1);
168 1 : aSheet0Annotations->insertNew(xTargetCellAddress0, "an inserted annotation 1 on sheet 1");
169 1 : table::CellAddress xSecondTargetCellAddress0 (0,0,2);
170 1 : aSheet0Annotations->insertNew(xSecondTargetCellAddress0, "an inserted annotation 2 on sheet 1");
171 1 : table::CellAddress xThirdCellAddress0 (0,0,3);
172 1 : aSheet0Annotations->insertNew(xThirdCellAddress0, "an inserted annotation 3 on sheet 1");
173 :
174 : // insert annotations in third sheet
175 2 : uno::Reference< sheet::XSheetAnnotations > aSheet2Annotations (getAnnotations(2), UNO_QUERY_THROW);
176 1 : table::CellAddress xTargetCellAddress2 (2,4,5);
177 1 : aSheet2Annotations->insertNew(xTargetCellAddress2, "an inserted annotation 1 on sheet 3");
178 1 : table::CellAddress xSecondTargetCellAddress2 (2,5,6);
179 1 : aSheet2Annotations->insertNew(xSecondTargetCellAddress2, "an inserted annotation 2 on sheet 3");
180 1 : table::CellAddress xThirdCellAddress2 (2,7,8);
181 1 : aSheet2Annotations->insertNew(xThirdCellAddress2, "an inserted annotation 3 on sheet 3");
182 :
183 : // get second annotation for second sheet
184 2 : uno::Reference< sheet::XSheetAnnotations > aSheetAnnotations (getAnnotations(2), UNO_QUERY_THROW);
185 2 : uno::Reference< container::XIndexAccess > xAnnotationsIndex (aSheetAnnotations, UNO_QUERY_THROW);
186 2 : uno::Reference< sheet::XSheetAnnotation > aAnnotation (xAnnotationsIndex->getByIndex(1), UNO_QUERY_THROW);
187 :
188 1 : table::CellAddress xToBeAnalyzedCellAddress = aAnnotation->getPosition();
189 :
190 : // is the CellAddress ok ?
191 2 : CPPUNIT_ASSERT_EQUAL_MESSAGE(
192 : "GetByIndex Annotation - Wrong SHEET reference position",
193 1 : xSecondTargetCellAddress2.Sheet, xToBeAnalyzedCellAddress.Sheet);
194 2 : CPPUNIT_ASSERT_EQUAL_MESSAGE(
195 : "GetByIndex Annotation - Wrong COLUMN reference position",
196 1 : xSecondTargetCellAddress2.Column, xToBeAnalyzedCellAddress.Column);
197 2 : CPPUNIT_ASSERT_EQUAL_MESSAGE(
198 : "GetByIndex Annotation - Wrong ROW reference position",
199 1 : xSecondTargetCellAddress2.Row, xToBeAnalyzedCellAddress.Row);
200 :
201 : // is the string ok ?
202 2 : uno::Reference< text::XTextRange > aTextSheetAnnotation(aAnnotation, UNO_QUERY_THROW);
203 2 : OUString aString = aTextSheetAnnotation->getString();
204 :
205 2 : CPPUNIT_ASSERT_EQUAL_MESSAGE(
206 : "GetByIndex Annotation - Wrong string",
207 2 : OUString("an inserted annotation 2 on sheet 3"), aString);
208 1 : }
209 :
210 90 : }
211 :
212 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|