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 "helper/debughelper.hxx"
11 #include "helper/qahelper.hxx"
14 #include <bcaslot.hxx>
15 #include <clipparam.hxx>
17 #include <docfunc.hxx>
18 #include <editeng/borderline.hxx>
19 #include <editeng/brushitem.hxx>
20 #include <editutil.hxx>
21 #include <formulacell.hxx>
23 #include <patattr.hxx>
25 #include <queryparam.hxx>
26 #include <refundo.hxx>
27 #include <scitems.hxx>
28 #include <scopetools.hxx>
29 #include <undomanager.hxx>
31 #include <sfx2/docfile.hxx>
38 class TestCopyPaste
: public ScUcalcTestBase
49 void executeCopyPasteSpecial(bool bApplyFilter
, bool bIncludedFiltered
, bool bAsLink
,
50 bool bTranspose
, bool bMultiRangeSelection
, bool bSkipEmpty
,
52 ScClipParam::Direction eDirection
= ScClipParam::Column
,
53 CalcMode eCalcMode
= CalcMode::AutoCalc
,
54 InsertDeleteFlags aFlags
55 = InsertDeleteFlags::CONTENTS
| InsertDeleteFlags::ATTRIB
);
56 void executeCopyPasteSpecial(const SCTAB srcSheet
, const SCTAB destSheet
, bool bApplyFilter
,
57 bool bIncludedFiltered
, bool bAsLink
, bool bTranspose
,
58 bool bMultiRangeSelection
, bool bSkipEmpty
,
59 std::unique_ptr
<ScUndoCut
>& pUndoCut
,
60 std::unique_ptr
<ScUndoPaste
>& pUndoPaste
, bool bCut
= false,
61 ScClipParam::Direction eDirection
= ScClipParam::Column
,
62 CalcMode eCalcMode
= CalcMode::AutoCalc
,
63 InsertDeleteFlags aFlags
64 = InsertDeleteFlags::CONTENTS
| InsertDeleteFlags::ATTRIB
);
65 void checkCopyPasteSpecialInitial(const SCTAB srcSheet
);
66 void checkCopyPasteSpecial(bool bSkipEmpty
, bool bCut
= false);
67 void checkCopyPasteSpecialFiltered(bool bSkipEmpty
);
68 void checkCopyPasteSpecialTranspose(bool bSkipEmpty
, bool bCut
= false);
69 void checkCopyPasteSpecialFilteredTranspose(bool bSkipEmpty
);
70 void checkCopyPasteSpecialMultiRangeCol(bool bSkipEmpty
);
71 void checkCopyPasteSpecialMultiRangeColFiltered(bool bSkipEmpty
);
72 void checkCopyPasteSpecialMultiRangeColTranspose(bool bSkipEmpty
);
73 void checkCopyPasteSpecialMultiRangeColFilteredTranspose(bool bSkipEmpty
);
74 void checkCopyPasteSpecialMultiRangeRow(bool bSkipEmpty
);
75 void checkCopyPasteSpecialMultiRangeRowFiltered(bool bSkipEmpty
);
76 void checkCopyPasteSpecialMultiRangeRowTranspose(bool bSkipEmpty
);
77 void checkCopyPasteSpecialMultiRangeRowFilteredTranspose(bool bSkipEmpty
);
78 void checkReferencedCutTransposedRangesRowUndo(const SCTAB nSrcTab
, const SCTAB nDestTab
);
79 void executeReferencedCutRangesRow(const bool bTransposed
, const SCTAB nSrcTab
,
80 const SCTAB nDestTab
, const bool bUndo
,
81 std::unique_ptr
<ScUndoCut
>& pUndoCut
,
82 std::unique_ptr
<ScUndoPaste
>& pUndoPaste
);
83 void checkReferencedCutRangesRowIntitial(const SCTAB nSrcTab
, const OUString
& rDesc
);
84 void checkReferencedCutRangesRow(const SCTAB nSrcTab
, const SCTAB nDestTab
);
85 void checkReferencedCutTransposedRangesRow(const SCTAB nSrcTab
, const SCTAB nDestTab
);
86 void executeReferencedCutRangesCol(const bool bTransposed
, const SCTAB nSrcTab
,
87 const SCTAB nDestTab
, const bool bUndo
,
88 std::unique_ptr
<ScUndoCut
>& pUndoCut
,
89 std::unique_ptr
<ScUndoPaste
>& pUndoPaste
);
90 void checkReferencedCutRangesColIntitial(const SCTAB nSrcTab
, const SCTAB nDestTab
,
91 const OUString
& rDesc
);
92 void checkReferencedCutRangesCol(const SCTAB nSrcTab
, const SCTAB nDestTab
);
93 void checkReferencedCutTransposedRangesColUndo(const SCTAB nSrcTab
, const SCTAB nDestTab
);
94 void checkReferencedCutTransposedRangesCol(const SCTAB nSrcTab
, const SCTAB nDestTab
);
95 void prepareUndoBeforePaste(bool bCut
, ScDocumentUniquePtr
& pPasteUndoDoc
,
96 std::unique_ptr
<ScDocument
>& pPasteRefUndoDoc
,
97 const ScMarkData
& rDestMark
, const ScRange
& rDestRange
,
98 std::unique_ptr
<ScRefUndoData
>& pUndoData
);
99 void prepareUndoAfterPaste(ScDocumentUniquePtr
& pPasteUndoDoc
,
100 std::unique_ptr
<ScDocument
>& pPasteRefUndoDoc
,
101 const ScMarkData
& rDestMark
, const ScRange
& rDestRange
,
102 std::unique_ptr
<ScRefUndoData
>& pUndoData
,
103 std::unique_ptr
<ScUndoPaste
>& pUndoPaste
, bool bTranspose
= false,
104 bool bAsLink
= false, bool bSkipEmpty
= false,
105 ScPasteFunc nFunction
= ScPasteFunc::NONE
,
106 InsCellCmd eMoveMode
= InsCellCmd::INS_NONE
);
108 void printValuesAndFormulasInRange(ScDocument
* pDoc
, const ScRange
& rRange
,
109 const OString
& rCaption
);
110 OUString
getRangeByName(const OUString
& aRangeName
);
111 ScAddress
setNote(SCCOL nCol
, SCROW nRow
, SCTAB nTab
, const OUString noteText
);
112 OUString
getNote(SCCOL nCol
, SCROW nRow
, SCTAB nTab
);
115 static ScMF
lcl_getMergeFlagOfCell(const ScDocument
& rDoc
, SCCOL nCol
, SCROW nRow
, SCTAB nTab
)
117 const SfxPoolItem
& rPoolItem
= rDoc
.GetPattern(nCol
, nRow
, nTab
)->GetItem(ATTR_MERGE_FLAG
);
118 const ScMergeFlagAttr
& rMergeFlag
= static_cast<const ScMergeFlagAttr
&>(rPoolItem
);
119 return rMergeFlag
.GetValue();
122 static ScAddress
lcl_getMergeSizeOfCell(const ScDocument
& rDoc
, SCCOL nCol
, SCROW nRow
, SCTAB nTab
)
124 const SfxPoolItem
& rPoolItem
= rDoc
.GetPattern(nCol
, nRow
, nTab
)->GetItem(ATTR_MERGE
);
125 const ScMergeAttr
& rMerge
= static_cast<const ScMergeAttr
&>(rPoolItem
);
126 return ScAddress(rMerge
.GetColMerge(), rMerge
.GetRowMerge(), nTab
);
129 void TestCopyPaste::printValuesAndFormulasInRange(ScDocument
* pDoc
, const ScRange
& rRange
,
130 const OString
& rCaption
)
132 printRange(pDoc
, rRange
, rCaption
, false);
133 printRange(pDoc
, rRange
, rCaption
, true);
136 OUString
TestCopyPaste::getRangeByName(const OUString
& aRangeName
)
138 return ScUcalcTestBase::getRangeByName(m_pDoc
, aRangeName
);
141 ScAddress
TestCopyPaste::setNote(SCCOL nCol
, SCROW nRow
, SCTAB nTab
, OUString noteText
)
143 ScAddress
aAdr(nCol
, nRow
, nTab
);
144 ScPostIt
* pNote
= m_pDoc
->GetOrCreateNote(aAdr
);
145 pNote
->SetText(aAdr
, noteText
);
149 OUString
TestCopyPaste::getNote(SCCOL nCol
, SCROW nRow
, SCTAB nTab
)
151 ScPostIt
* pNote
= m_pDoc
->GetNote(nCol
, nRow
, nTab
);
152 CPPUNIT_ASSERT_MESSAGE("Note expected", pNote
);
153 return pNote
->GetText();
156 // Cannot be moved to qahelper since ScDocument::CopyToDocument() is not SC_DLLPUBLIC
157 /** Executes the same steps for undo as ScViewFunc::PasteFromClip(). */
158 void TestCopyPaste::prepareUndoBeforePaste(bool bCut
, ScDocumentUniquePtr
& pPasteUndoDoc
,
159 std::unique_ptr
<ScDocument
>& pPasteRefUndoDoc
,
160 const ScMarkData
& rDestMark
, const ScRange
& rDestRange
,
161 std::unique_ptr
<ScRefUndoData
>& pUndoData
)
163 InsertDeleteFlags nUndoFlags
= InsertDeleteFlags::CONTENTS
;
164 SCTAB nTabCount
= m_pDoc
->GetTableCount();
166 pPasteUndoDoc
.reset(new ScDocument(SCDOCMODE_UNDO
));
167 pPasteUndoDoc
->InitUndoSelected(*m_pDoc
, rDestMark
, false, false);
168 // all sheets - CopyToDocument skips those that don't exist in pUndoDoc
169 m_pDoc
->CopyToDocument(rDestRange
.aStart
.Col(), rDestRange
.aStart
.Row(), 0,
170 rDestRange
.aEnd
.Col(), rDestRange
.aEnd
.Row(), nTabCount
- 1, nUndoFlags
,
171 false, *pPasteUndoDoc
);
175 // save changed references
176 pPasteRefUndoDoc
.reset(new ScDocument(SCDOCMODE_UNDO
));
177 pPasteRefUndoDoc
->InitUndo(*m_pDoc
, 0, nTabCount
- 1);
179 pUndoData
.reset(new ScRefUndoData(m_pDoc
));
183 // Cannot be moved to qahelper since ScDocument::CopyToDocument() is not SC_DLLPUBLIC
184 /** Executes the same steps for undo as ScViewFunc::PasteFromClip(). */
185 void TestCopyPaste::prepareUndoAfterPaste(ScDocumentUniquePtr
& pPasteUndoDoc
,
186 std::unique_ptr
<ScDocument
>& pPasteRefUndoDoc
,
187 const ScMarkData
& rDestMark
, const ScRange
& rDestRange
,
188 std::unique_ptr
<ScRefUndoData
>& pUndoData
,
189 std::unique_ptr
<ScUndoPaste
>& pUndoPaste
, bool bTranspose
,
190 bool bAsLink
, bool bSkipEmpty
, ScPasteFunc nFunction
,
191 InsCellCmd eMoveMode
)
193 InsertDeleteFlags nUndoFlags
= InsertDeleteFlags::CONTENTS
;
194 SCTAB nTabCount
= m_pDoc
->GetTableCount();
196 ScDocumentUniquePtr pPasteRedoDoc
;
197 // copy redo data after appearance of the first undo
198 // don't create Redo-Doc without RefUndoDoc
200 if (pPasteRefUndoDoc
)
202 pPasteRedoDoc
.reset(new ScDocument(SCDOCMODE_UNDO
));
203 pPasteRedoDoc
->InitUndo(*m_pDoc
, rDestRange
.aStart
.Tab(), rDestRange
.aEnd
.Tab(), false,
206 // move adapted refs to Redo-Doc
208 pPasteRedoDoc
->AddUndoTab(0, nTabCount
- 1);
209 m_pDoc
->CopyUpdated(pPasteRefUndoDoc
.get(), pPasteRedoDoc
.get());
211 pPasteUndoDoc
->AddUndoTab(0, nTabCount
- 1);
212 pPasteRefUndoDoc
->DeleteArea(rDestRange
.aStart
.Col(), rDestRange
.aStart
.Row(),
213 rDestRange
.aEnd
.Col(), rDestRange
.aEnd
.Row(), rDestMark
,
214 InsertDeleteFlags::ALL
);
215 pPasteRefUndoDoc
->CopyToDocument(0, 0, 0, pPasteUndoDoc
->MaxCol(), pPasteUndoDoc
->MaxRow(),
216 nTabCount
- 1, InsertDeleteFlags::FORMULA
, false,
218 pPasteRefUndoDoc
.reset();
221 ScUndoPasteOptions aOptions
; // store options for repeat
222 aOptions
.nFunction
= nFunction
;
223 aOptions
.bSkipEmptyCells
= bSkipEmpty
;
224 aOptions
.bTranspose
= bTranspose
;
225 aOptions
.bAsLink
= bAsLink
;
226 aOptions
.eMoveMode
= eMoveMode
;
228 pUndoPaste
.reset(new ScUndoPaste(&*m_xDocShell
, rDestRange
, rDestMark
, std::move(pPasteUndoDoc
),
229 std::move(pPasteRedoDoc
), nUndoFlags
, std::move(pUndoData
),
231 &aOptions
)); // false = Redo data not yet copied
234 CPPUNIT_TEST_FIXTURE(TestCopyPaste
, testCopyPaste
)
236 m_pDoc
->InsertTab(0, u
"Sheet1"_ustr
);
237 m_pDoc
->InsertTab(1, u
"Sheet2"_ustr
);
239 // We need a drawing layer in order to create caption objects.
240 m_pDoc
->InitDrawLayer(m_xDocShell
.get());
242 //test copy&paste + ScUndoPaste
243 //copy local and global range names in formulas
244 //string cells and value cells
245 m_pDoc
->SetValue(0, 0, 0, 1);
246 m_pDoc
->SetValue(3, 0, 0, 0);
247 m_pDoc
->SetValue(3, 1, 0, 1);
248 m_pDoc
->SetValue(3, 2, 0, 2);
249 m_pDoc
->SetValue(3, 3, 0, 3);
250 m_pDoc
->SetString(2, 0, 0, u
"test"_ustr
);
251 ScAddress
aAdr(0, 0, 0);
253 //create some range names, local and global
254 ScRangeData
* pLocal1
= new ScRangeData(*m_pDoc
, u
"local1"_ustr
, aAdr
);
255 ScRangeData
* pLocal2
= new ScRangeData(*m_pDoc
, u
"local2"_ustr
, aAdr
);
256 ScRangeData
* pLocal3
= new ScRangeData(*m_pDoc
, u
"local3"_ustr
, u
"$Sheet1.$A$1"_ustr
);
257 ScRangeData
* pLocal4
= new ScRangeData(*m_pDoc
, u
"local4"_ustr
, u
"Sheet1.$A$1"_ustr
);
258 ScRangeData
* pLocal5
= new ScRangeData(*m_pDoc
, u
"local5"_ustr
,
259 u
"$A$1"_ustr
); // implicit relative sheet reference
260 ScRangeData
* pGlobal
= new ScRangeData(*m_pDoc
, u
"global"_ustr
, aAdr
);
261 constexpr OUString
aGlobal2Symbol(u
"$Sheet1.$A$1:$A$23"_ustr
);
262 ScRangeData
* pGlobal2
= new ScRangeData(*m_pDoc
, u
"global2"_ustr
, aGlobal2Symbol
);
263 std::unique_ptr
<ScRangeName
> pGlobalRangeName(new ScRangeName());
264 pGlobalRangeName
->insert(pGlobal
);
265 pGlobalRangeName
->insert(pGlobal2
);
266 std::unique_ptr
<ScRangeName
> pLocalRangeName1(new ScRangeName());
267 pLocalRangeName1
->insert(pLocal1
);
268 pLocalRangeName1
->insert(pLocal2
);
269 pLocalRangeName1
->insert(pLocal3
);
270 pLocalRangeName1
->insert(pLocal4
);
271 pLocalRangeName1
->insert(pLocal5
);
272 m_pDoc
->SetRangeName(std::move(pGlobalRangeName
));
273 m_pDoc
->SetRangeName(0, std::move(pLocalRangeName1
));
275 // Add formula to B1.
276 OUString
aFormulaString(u
"=local1+global+SUM($C$1:$D$4)+local3+local4+local5"_ustr
);
277 m_pDoc
->SetString(1, 0, 0, aFormulaString
);
279 double fValue
= m_pDoc
->GetValue(ScAddress(1, 0, 0));
280 ASSERT_DOUBLES_EQUAL_MESSAGE("formula should return 11", 11, fValue
);
282 // add notes to A1:C1
283 setNote(0, 0, 0, u
"Hello world in A1"_ustr
); // empty cell content
284 setNote(1, 0, 0, u
"Hello world in B1"_ustr
); // formula cell content
285 setNote(2, 0, 0, u
"Hello world in C1"_ustr
); // string cell content
287 //copy Sheet1.A1:C1 to Sheet2.A2:C2
288 ScRange
aRange(0, 0, 0, 2, 0, 0);
289 ScDocument
aClipDoc(SCDOCMODE_CLIP
);
290 copyToClip(m_pDoc
, aRange
, &aClipDoc
);
292 aRange
= ScRange(0, 1, 1, 2, 1, 1); //target: Sheet2.A2:C2
293 ScDocumentUniquePtr
pUndoDoc(new ScDocument(SCDOCMODE_UNDO
));
294 pUndoDoc
->InitUndo(*m_pDoc
, 1, 1, true, true);
295 std::unique_ptr
<ScUndoPaste
> pUndo(createUndoPaste(*m_xDocShell
, aRange
, std::move(pUndoDoc
)));
296 ScMarkData
aMark(m_pDoc
->GetSheetLimits());
297 aMark
.SetMarkArea(aRange
);
298 m_pDoc
->CopyFromClip(aRange
, aMark
, InsertDeleteFlags::ALL
, nullptr, &aClipDoc
);
300 //check values after copying
301 OUString aString
= m_pDoc
->GetFormula(1, 1, 1);
302 CPPUNIT_ASSERT_EQUAL_MESSAGE("formula string was not copied correctly", aString
,
304 // Only the global range points to Sheet1.A1, all copied sheet-local ranges
305 // to Sheet2.A1 that is empty, hence the result is 1, not 2.
306 fValue
= m_pDoc
->GetValue(ScAddress(1, 1, 1));
307 ASSERT_DOUBLES_EQUAL_MESSAGE("copied formula should return 1", 1.0, fValue
);
308 fValue
= m_pDoc
->GetValue(ScAddress(0, 1, 1));
309 ASSERT_DOUBLES_EQUAL_MESSAGE("copied value should be 1", 1.0, fValue
);
311 ScRange
aSheet2A1(0, 0, 1, 0, 0, 1);
313 //check local range name after copying
314 pLocal1
= m_pDoc
->GetRangeName(1)->findByUpperName(u
"LOCAL1"_ustr
);
315 CPPUNIT_ASSERT_MESSAGE("local range name 1 should be copied", pLocal1
);
316 ScRange aRangeLocal1
;
317 bool bIsValidRef1
= pLocal1
->IsValidReference(aRangeLocal1
);
318 CPPUNIT_ASSERT_MESSAGE("local range name 1 should be valid", bIsValidRef1
);
319 CPPUNIT_ASSERT_EQUAL_MESSAGE("local range 1 should now point to Sheet2.A1", aSheet2A1
,
322 pLocal2
= m_pDoc
->GetRangeName(1)->findByUpperName(u
"LOCAL2"_ustr
);
323 CPPUNIT_ASSERT_MESSAGE("local2 should not be copied", !pLocal2
);
325 pLocal3
= m_pDoc
->GetRangeName(1)->findByUpperName(u
"LOCAL3"_ustr
);
326 CPPUNIT_ASSERT_MESSAGE("local range name 3 should be copied", pLocal3
);
327 ScRange aRangeLocal3
;
328 bool bIsValidRef3
= pLocal3
->IsValidReference(aRangeLocal3
);
329 CPPUNIT_ASSERT_MESSAGE("local range name 3 should be valid", bIsValidRef3
);
330 CPPUNIT_ASSERT_EQUAL_MESSAGE("local range 3 should now point to Sheet2.A1", aSheet2A1
,
333 pLocal4
= m_pDoc
->GetRangeName(1)->findByUpperName(u
"LOCAL4"_ustr
);
334 CPPUNIT_ASSERT_MESSAGE("local range name 4 should be copied", pLocal4
);
335 ScRange aRangeLocal4
;
336 bool bIsValidRef4
= pLocal4
->IsValidReference(aRangeLocal4
);
337 CPPUNIT_ASSERT_MESSAGE("local range name 4 should be valid", bIsValidRef4
);
338 CPPUNIT_ASSERT_EQUAL_MESSAGE("local range 4 should now point to Sheet2.A1", aSheet2A1
,
341 pLocal5
= m_pDoc
->GetRangeName(1)->findByUpperName(u
"LOCAL5"_ustr
);
342 CPPUNIT_ASSERT_MESSAGE("local range name 5 should be copied", pLocal5
);
343 ScRange aRangeLocal5
;
344 bool bIsValidRef5
= pLocal5
->IsValidReference(aRangeLocal5
);
345 CPPUNIT_ASSERT_MESSAGE("local range name 5 should be valid", bIsValidRef5
);
346 CPPUNIT_ASSERT_EQUAL_MESSAGE("local range 5 should now point to Sheet2.A1", aSheet2A1
,
349 // check notes after copying
350 CPPUNIT_ASSERT_MESSAGE("There should be a note on Sheet2.A2", m_pDoc
->HasNote(0, 1, 1));
351 CPPUNIT_ASSERT_MESSAGE("There should be a note on Sheet2.B2", m_pDoc
->HasNote(1, 1, 1));
352 CPPUNIT_ASSERT_MESSAGE("There should be a note on Sheet2.C2", m_pDoc
->HasNote(2, 1, 1));
353 CPPUNIT_ASSERT_EQUAL_MESSAGE(
354 "Note content on Sheet1.A1 not copied to Sheet2.A2, empty cell content",
355 m_pDoc
->GetNote(0, 0, 0)->GetText(), m_pDoc
->GetNote(0, 1, 1)->GetText());
356 CPPUNIT_ASSERT_EQUAL_MESSAGE(
357 "Note content on Sheet1.B1 not copied to Sheet2.B2, formula cell content",
358 m_pDoc
->GetNote(1, 0, 0)->GetText(), m_pDoc
->GetNote(1, 1, 1)->GetText());
359 CPPUNIT_ASSERT_EQUAL_MESSAGE(
360 "Note content on Sheet1.C1 not copied to Sheet2.C2, string cell content",
361 m_pDoc
->GetNote(2, 0, 0)->GetText(), m_pDoc
->GetNote(2, 1, 1)->GetText());
363 //check undo and redo
365 fValue
= m_pDoc
->GetValue(ScAddress(1, 1, 1));
366 ASSERT_DOUBLES_EQUAL_MESSAGE("after undo formula should return nothing", 0, fValue
);
367 aString
= m_pDoc
->GetString(2, 1, 1);
368 CPPUNIT_ASSERT_MESSAGE("after undo, string should be removed", aString
.isEmpty());
369 CPPUNIT_ASSERT_MESSAGE("after undo, note on A2 should be removed", !m_pDoc
->HasNote(0, 1, 1));
370 CPPUNIT_ASSERT_MESSAGE("after undo, note on B2 should be removed", !m_pDoc
->HasNote(1, 1, 1));
371 CPPUNIT_ASSERT_MESSAGE("after undo, note on C2 should be removed", !m_pDoc
->HasNote(2, 1, 1));
374 fValue
= m_pDoc
->GetValue(ScAddress(1, 1, 1));
375 ASSERT_DOUBLES_EQUAL_MESSAGE("formula should return 1 after redo", 1.0, fValue
);
376 aString
= m_pDoc
->GetString(2, 1, 1);
377 CPPUNIT_ASSERT_EQUAL_MESSAGE("Cell Sheet2.C2 should contain: test", u
"test"_ustr
, aString
);
378 aString
= m_pDoc
->GetFormula(1, 1, 1);
379 CPPUNIT_ASSERT_EQUAL_MESSAGE("Formula should be correct again", aFormulaString
, aString
);
381 CPPUNIT_ASSERT_MESSAGE("After Redo, there should be a note on Sheet2.A2",
382 m_pDoc
->HasNote(0, 1, 1));
383 CPPUNIT_ASSERT_MESSAGE("After Redo, there should be a note on Sheet2.B2",
384 m_pDoc
->HasNote(1, 1, 1));
385 CPPUNIT_ASSERT_MESSAGE("After Redo, there should be a note on Sheet2.C2",
386 m_pDoc
->HasNote(2, 1, 1));
387 CPPUNIT_ASSERT_EQUAL_MESSAGE("After Redo, note again on Sheet2.A2, empty cell content",
388 getNote(0, 0, 0), getNote(0, 1, 1));
389 CPPUNIT_ASSERT_EQUAL_MESSAGE("After Redo, note again on Sheet2.B2, formula cell content",
390 getNote(1, 0, 0), getNote(1, 1, 1));
391 CPPUNIT_ASSERT_EQUAL_MESSAGE("After Redo, note again on Sheet2.C2, string cell content",
392 getNote(2, 0, 0), getNote(2, 1, 1));
394 // Copy Sheet1.A11:A13 to Sheet1.A7:A9, both within global2 range.
395 aRange
= ScRange(0, 10, 0, 0, 12, 0);
396 ScDocument
aClipDoc2(SCDOCMODE_CLIP
);
397 copyToClip(m_pDoc
, aRange
, &aClipDoc2
);
399 aRange
= ScRange(0, 6, 0, 0, 8, 0);
400 aMark
.SetMarkArea(aRange
);
401 m_pDoc
->CopyFromClip(aRange
, aMark
, InsertDeleteFlags::ALL
, nullptr, &aClipDoc2
);
403 // The global2 range must not have changed.
404 pGlobal2
= m_pDoc
->GetRangeName()->findByUpperName(u
"GLOBAL2"_ustr
);
405 CPPUNIT_ASSERT_MESSAGE("GLOBAL2 name not found", pGlobal2
);
406 OUString aSymbol
= pGlobal2
->GetSymbol();
407 CPPUNIT_ASSERT_EQUAL_MESSAGE("GLOBAL2 named range changed", aGlobal2Symbol
, aSymbol
);
409 m_pDoc
->DeleteTab(1);
410 m_pDoc
->DeleteTab(0);
413 CPPUNIT_TEST_FIXTURE(TestCopyPaste
, testCopyPasteAsLink
)
415 sc::AutoCalcSwitch
aACSwitch(*m_pDoc
, true); // Turn on auto calc.
417 m_pDoc
->InsertTab(0, u
"Sheet1"_ustr
);
418 m_pDoc
->InsertTab(1, u
"Sheet2"_ustr
);
420 m_pDoc
->SetValue(ScAddress(0, 0, 0), 1); // A1
421 m_pDoc
->SetValue(ScAddress(0, 1, 0), 2); // A2
422 m_pDoc
->SetValue(ScAddress(0, 2, 0), 3); // A3
424 ScRange
aRange(0, 0, 0, 0, 2, 0); // Copy A1:A3 to clip.
425 ScDocument
aClipDoc(SCDOCMODE_CLIP
);
426 copyToClip(m_pDoc
, aRange
, &aClipDoc
);
428 aRange
= ScRange(1, 1, 1, 1, 3, 1); // Paste to B2:B4 on Sheet2.
429 ScMarkData
aMark(m_pDoc
->GetSheetLimits());
430 aMark
.SetMarkArea(aRange
);
431 // Paste range as link.
432 m_pDoc
->CopyFromClip(aRange
, aMark
, InsertDeleteFlags::CONTENTS
, nullptr, &aClipDoc
, true,
435 // Check pasted content to make sure they reference the correct cells.
436 ScFormulaCell
* pFC
= m_pDoc
->GetFormulaCell(ScAddress(1, 1, 1));
437 CPPUNIT_ASSERT_MESSAGE("This should be a formula cell.", pFC
);
438 CPPUNIT_ASSERT_EQUAL(1.0, pFC
->GetValue());
440 pFC
= m_pDoc
->GetFormulaCell(ScAddress(1, 2, 1));
441 CPPUNIT_ASSERT_MESSAGE("This should be a formula cell.", pFC
);
442 CPPUNIT_ASSERT_EQUAL(2.0, pFC
->GetValue());
444 pFC
= m_pDoc
->GetFormulaCell(ScAddress(1, 3, 1));
445 CPPUNIT_ASSERT_MESSAGE("This should be a formula cell.", pFC
);
446 CPPUNIT_ASSERT_EQUAL(3.0, pFC
->GetValue());
448 m_pDoc
->DeleteTab(1);
449 m_pDoc
->DeleteTab(0);
452 CPPUNIT_TEST_FIXTURE(TestCopyPaste
, testCopyPasteTranspose
)
454 m_pDoc
->InsertTab(0, u
"Sheet1"_ustr
);
456 // We need a drawing layer in order to create caption objects.
457 m_pDoc
->InitDrawLayer(m_xDocShell
.get());
459 m_pDoc
->SetValue(0, 0, 0, 1);
460 m_pDoc
->SetString(1, 0, 0, u
"=A1+1"_ustr
);
461 m_pDoc
->SetString(2, 0, 0, u
"test"_ustr
);
463 // add notes to A1:C1
464 setNote(0, 0, 0, u
"Hello world in A1"_ustr
); // numerical cell content
465 setNote(1, 0, 0, u
"Hello world in B1"_ustr
); // formula cell content
466 setNote(2, 0, 0, u
"Hello world in C1"_ustr
); // string cell content
468 // transpose clipboard, paste and check on Sheet2
469 m_pDoc
->InsertTab(1, u
"Sheet2"_ustr
);
471 ScRange
aSrcRange(0, 0, 0, 2, 0, 0);
472 ScDocument
aNewClipDoc(SCDOCMODE_CLIP
);
473 copyToClip(m_pDoc
, aSrcRange
, &aNewClipDoc
);
475 ScDocumentUniquePtr
pTransClip(new ScDocument(SCDOCMODE_CLIP
));
476 aNewClipDoc
.TransposeClip(pTransClip
.get(), InsertDeleteFlags::ALL
, false, false);
478 ScRange
aDestRange(3, 1, 1, 3, 3, 1); //target: Sheet2.D2:D4
479 ScMarkData
aMark(m_pDoc
->GetSheetLimits());
480 aMark
.SetMarkArea(aDestRange
);
481 m_pDoc
->CopyFromClip(aDestRange
, aMark
, InsertDeleteFlags::ALL
, nullptr, pTransClip
.get());
484 //check cell content after transposed copy/paste
485 OUString aString
= m_pDoc
->GetString(3, 3, 1);
486 CPPUNIT_ASSERT_EQUAL_MESSAGE("Cell Sheet2.D4 should contain: test", u
"test"_ustr
, aString
);
487 double fValue
= m_pDoc
->GetValue(ScAddress(3, 1, 1));
488 ASSERT_DOUBLES_EQUAL_MESSAGE("transposed copied cell should return 1", 1, fValue
);
489 fValue
= m_pDoc
->GetValue(ScAddress(3, 2, 1));
490 ASSERT_DOUBLES_EQUAL_MESSAGE("transposed copied formula should return 2", 2, fValue
);
491 aString
= m_pDoc
->GetFormula(3, 2, 1);
492 CPPUNIT_ASSERT_EQUAL_MESSAGE("transposed formula should point on Sheet2.D2", u
"=D2+1"_ustr
,
495 // check notes after transposed copy/paste
496 CPPUNIT_ASSERT_MESSAGE("There should be a note on Sheet2.D2", m_pDoc
->HasNote(3, 1, 1));
497 CPPUNIT_ASSERT_MESSAGE("There should be a note on Sheet2.D3", m_pDoc
->HasNote(3, 2, 1));
498 CPPUNIT_ASSERT_MESSAGE("There should be a note on Sheet2.D4", m_pDoc
->HasNote(3, 3, 1));
499 CPPUNIT_ASSERT_EQUAL_MESSAGE("Content of cell note on Sheet2.D2", getNote(0, 0, 0),
501 CPPUNIT_ASSERT_EQUAL_MESSAGE("Content of cell note on Sheet2.D3", getNote(1, 0, 0),
503 CPPUNIT_ASSERT_EQUAL_MESSAGE("Content of cell note on Sheet2.D4", getNote(2, 0, 0),
506 m_pDoc
->DeleteTab(1);
507 m_pDoc
->DeleteTab(0);
510 CPPUNIT_TEST_FIXTURE(TestCopyPaste
, testCopyPasteSpecialMergedCellsTranspose
)
512 const SCTAB srcSheet
= 0;
513 const SCTAB destSheet
= 1;
515 sc::AutoCalcSwitch
aACSwitch(*m_pDoc
, true); // Turn on auto calc.
517 m_pDoc
->InsertTab(srcSheet
, u
"Sheet1"_ustr
);
518 m_pDoc
->InsertTab(destSheet
, u
"Sheet2"_ustr
);
520 m_pDoc
->SetValue(0, 0, srcSheet
, 1); // A1
521 m_pDoc
->SetValue(0, 1, srcSheet
, 2); // A2
522 m_pDoc
->SetValue(0, 2, srcSheet
, 3); // A3
523 m_pDoc
->SetValue(0, 3, srcSheet
, 4); // A4
525 m_pDoc
->DoMerge(0, 1, 1, 1, srcSheet
, false); // Merge A2 and B2
526 m_pDoc
->DoMerge(0, 2, 1, 2, srcSheet
, false); // Merge A3 and B3
529 CPPUNIT_ASSERT_EQUAL(ScAddress(0, 0, srcSheet
),
530 lcl_getMergeSizeOfCell(*m_pDoc
, 0, 0, srcSheet
));
531 CPPUNIT_ASSERT_EQUAL(ScMF::NONE
, lcl_getMergeFlagOfCell(*m_pDoc
, 1, 0, srcSheet
));
532 CPPUNIT_ASSERT_EQUAL(ScAddress(2, 1, srcSheet
),
533 lcl_getMergeSizeOfCell(*m_pDoc
, 0, 1, srcSheet
));
534 CPPUNIT_ASSERT_EQUAL(ScAddress(0, 0, srcSheet
),
535 lcl_getMergeSizeOfCell(*m_pDoc
, 1, 1, srcSheet
));
536 CPPUNIT_ASSERT_EQUAL(ScMF::Hor
, lcl_getMergeFlagOfCell(*m_pDoc
, 1, 1, srcSheet
));
537 CPPUNIT_ASSERT_EQUAL(ScAddress(2, 1, srcSheet
),
538 lcl_getMergeSizeOfCell(*m_pDoc
, 0, 2, srcSheet
));
539 CPPUNIT_ASSERT_EQUAL(ScAddress(0, 0, srcSheet
),
540 lcl_getMergeSizeOfCell(*m_pDoc
, 1, 2, srcSheet
));
541 CPPUNIT_ASSERT_EQUAL(ScMF::Hor
, lcl_getMergeFlagOfCell(*m_pDoc
, 1, 2, srcSheet
));
542 CPPUNIT_ASSERT_EQUAL(ScAddress(0, 0, srcSheet
),
543 lcl_getMergeSizeOfCell(*m_pDoc
, 0, 3, srcSheet
));
544 CPPUNIT_ASSERT_EQUAL(ScMF::NONE
, lcl_getMergeFlagOfCell(*m_pDoc
, 1, 3, srcSheet
));
546 ScRange
aSrcRange(0, 0, srcSheet
, 1, 3, srcSheet
); // Copy A1:B4 to clip.
547 ScDocument
aClipDoc(SCDOCMODE_CLIP
);
548 copyToClip(m_pDoc
, aSrcRange
, &aClipDoc
);
551 ScDocumentUniquePtr
pTransClip(new ScDocument(SCDOCMODE_CLIP
));
552 aClipDoc
.TransposeClip(pTransClip
.get(), InsertDeleteFlags::ALL
, true, false);
554 ScRange
aDestRange(1, 1, destSheet
, 4, 2, destSheet
); // Paste to B2:E3 on Sheet2.
555 ScMarkData
aMark(m_pDoc
->GetSheetLimits());
556 aMark
.SetMarkArea(aDestRange
);
557 m_pDoc
->CopyFromClip(aDestRange
, aMark
, InsertDeleteFlags::ALL
, nullptr, pTransClip
.get(), true,
561 // Check transpose of merged cells
562 CPPUNIT_ASSERT_EQUAL(ScAddress(0, 0, destSheet
),
563 lcl_getMergeSizeOfCell(*m_pDoc
, 1, 1, destSheet
));
564 CPPUNIT_ASSERT_EQUAL(ScMF::NONE
, lcl_getMergeFlagOfCell(*m_pDoc
, 1, 2, destSheet
));
565 CPPUNIT_ASSERT_EQUAL(ScAddress(1, 2, destSheet
),
566 lcl_getMergeSizeOfCell(*m_pDoc
, 2, 1, destSheet
));
567 CPPUNIT_ASSERT_EQUAL(2.0, m_pDoc
->GetValue(2, 1, destSheet
));
568 CPPUNIT_ASSERT_EQUAL(ScAddress(1, 2, destSheet
),
569 lcl_getMergeSizeOfCell(*m_pDoc
, 3, 1, destSheet
));
570 CPPUNIT_ASSERT_EQUAL(3.0, m_pDoc
->GetValue(3, 1, destSheet
));
571 CPPUNIT_ASSERT_EQUAL(ScAddress(0, 0, destSheet
),
572 lcl_getMergeSizeOfCell(*m_pDoc
, 4, 1, destSheet
));
573 CPPUNIT_ASSERT_EQUAL(ScMF::NONE
, lcl_getMergeFlagOfCell(*m_pDoc
, 4, 2, destSheet
));
575 m_pDoc
->DeleteTab(destSheet
);
576 m_pDoc
->DeleteTab(srcSheet
);
579 CPPUNIT_TEST_FIXTURE(TestCopyPaste
, testCopyPasteSpecialMergedCellsFilteredTranspose
)
581 const SCTAB srcSheet
= 0;
582 const SCTAB destSheet
= 1;
584 sc::AutoCalcSwitch
aACSwitch(*m_pDoc
, true); // Turn on auto calc.
586 m_pDoc
->InsertTab(srcSheet
, u
"Sheet1"_ustr
);
587 m_pDoc
->InsertTab(destSheet
, u
"Sheet2"_ustr
);
589 m_pDoc
->SetValue(0, 0, srcSheet
, 1); // A1
590 m_pDoc
->SetValue(0, 1, srcSheet
, 2); // A2
591 m_pDoc
->SetValue(0, 2, srcSheet
, 3); // A3
592 m_pDoc
->SetValue(0, 3, srcSheet
, 4); // A4
594 m_pDoc
->DoMerge(0, 1, 1, 1, srcSheet
, false); // Merge A2 and B2
595 m_pDoc
->DoMerge(0, 2, 1, 2, srcSheet
, false); // Merge A3 and B3
598 ScDBData
* pDBData
= new ScDBData(u
"TRANSPOSE_TEST_DATA"_ustr
, srcSheet
, 0, 0, 0, 3);
599 m_pDoc
->SetAnonymousDBData(0, std::unique_ptr
<ScDBData
>(pDBData
));
601 pDBData
->SetAutoFilter(true);
603 pDBData
->GetArea(aRange
);
604 m_pDoc
->ApplyFlagsTab(aRange
.aStart
.Col(), aRange
.aStart
.Row(), aRange
.aEnd
.Col(),
605 aRange
.aStart
.Row(), aRange
.aStart
.Tab(), ScMF::Auto
);
607 //create the query param
609 pDBData
->GetQueryParam(aParam
);
610 ScQueryEntry
& rEntry
= aParam
.GetEntry(0);
611 rEntry
.bDoQuery
= true;
613 rEntry
.eOp
= SC_NOT_EQUAL
;
614 rEntry
.GetQueryItem().mfVal
= 2; // value of row A2 -> filtering row 1
615 // add queryParam to database range.
616 pDBData
->SetQueryParam(aParam
);
618 // perform the query.
619 m_pDoc
->Query(srcSheet
, aParam
, true);
622 CPPUNIT_ASSERT_EQUAL(ScAddress(0, 0, srcSheet
),
623 lcl_getMergeSizeOfCell(*m_pDoc
, 0, 0, srcSheet
));
624 CPPUNIT_ASSERT_EQUAL(ScMF::NONE
, lcl_getMergeFlagOfCell(*m_pDoc
, 1, 0, srcSheet
));
625 CPPUNIT_ASSERT_EQUAL(ScAddress(2, 1, srcSheet
),
626 lcl_getMergeSizeOfCell(*m_pDoc
, 0, 1, srcSheet
));
627 CPPUNIT_ASSERT_EQUAL(ScAddress(0, 0, srcSheet
),
628 lcl_getMergeSizeOfCell(*m_pDoc
, 1, 1, srcSheet
));
629 CPPUNIT_ASSERT_EQUAL(ScMF::Hor
, lcl_getMergeFlagOfCell(*m_pDoc
, 1, 1, srcSheet
));
630 CPPUNIT_ASSERT_EQUAL(ScAddress(2, 1, srcSheet
),
631 lcl_getMergeSizeOfCell(*m_pDoc
, 0, 2, srcSheet
));
632 CPPUNIT_ASSERT_EQUAL(ScAddress(0, 0, srcSheet
),
633 lcl_getMergeSizeOfCell(*m_pDoc
, 1, 2, srcSheet
));
634 CPPUNIT_ASSERT_EQUAL(ScMF::Hor
, lcl_getMergeFlagOfCell(*m_pDoc
, 1, 2, srcSheet
));
635 CPPUNIT_ASSERT_EQUAL(ScAddress(0, 0, srcSheet
),
636 lcl_getMergeSizeOfCell(*m_pDoc
, 0, 3, srcSheet
));
637 CPPUNIT_ASSERT_EQUAL(ScMF::NONE
, lcl_getMergeFlagOfCell(*m_pDoc
, 1, 3, srcSheet
));
639 ScRange
aSrcRange(0, 0, srcSheet
, 1, 3, srcSheet
); // Copy A1:B4 to clip.
640 ScDocument
aClipDoc(SCDOCMODE_CLIP
);
641 copyToClip(m_pDoc
, aSrcRange
, &aClipDoc
);
644 ScDocumentUniquePtr
pTransClip(new ScDocument(SCDOCMODE_CLIP
));
645 aClipDoc
.TransposeClip(pTransClip
.get(), InsertDeleteFlags::ALL
, true, false);
647 ScRange
aDestRange(1, 1, destSheet
, 3, 2, destSheet
); // Paste to B2:D3 on Sheet2.
648 ScMarkData
aMark(m_pDoc
->GetSheetLimits());
649 aMark
.SetMarkArea(aDestRange
);
650 m_pDoc
->CopyFromClip(aDestRange
, aMark
, InsertDeleteFlags::ALL
, nullptr, pTransClip
.get(), true,
654 // Check transpose of merged cells
655 CPPUNIT_ASSERT_EQUAL(ScAddress(0, 0, destSheet
),
656 lcl_getMergeSizeOfCell(*m_pDoc
, 1, 1, destSheet
));
657 CPPUNIT_ASSERT_EQUAL(ScMF::NONE
, lcl_getMergeFlagOfCell(*m_pDoc
, 1, 2, destSheet
));
658 CPPUNIT_ASSERT_EQUAL(ScAddress(1, 2, destSheet
),
659 lcl_getMergeSizeOfCell(*m_pDoc
, 2, 1, destSheet
));
660 CPPUNIT_ASSERT_EQUAL(3.0, m_pDoc
->GetValue(2, 1, destSheet
));
661 CPPUNIT_ASSERT_EQUAL(ScAddress(0, 0, destSheet
),
662 lcl_getMergeSizeOfCell(*m_pDoc
, 3, 1, destSheet
));
663 CPPUNIT_ASSERT_EQUAL(ScMF::NONE
, lcl_getMergeFlagOfCell(*m_pDoc
, 3, 2, destSheet
));
665 m_pDoc
->DeleteTab(destSheet
);
666 m_pDoc
->DeleteTab(srcSheet
);
669 // InsertDeleteFlags::CONTENTS
670 CPPUNIT_TEST_FIXTURE(TestCopyPaste
, testCopyPasteSpecialAsLinkTranspose
)
672 const SCTAB srcSheet
= 0;
673 const SCTAB destSheet
= 1;
675 sc::AutoCalcSwitch
aACSwitch(*m_pDoc
, true); // Turn on auto calc.
677 m_pDoc
->InsertTab(srcSheet
, u
"Sheet1"_ustr
);
678 m_pDoc
->InsertTab(destSheet
, u
"Sheet2"_ustr
);
680 m_pDoc
->SetValue(0, 0, srcSheet
, 1); // A1
681 m_pDoc
->SetValue(0, 1, srcSheet
, 2); // A2
682 m_pDoc
->SetValue(0, 3, srcSheet
, 4); // A4
684 ScRange
aSrcRange(0, 0, srcSheet
, 0, 3, srcSheet
); // Copy A1:A4 to clip.
685 ScDocument
aClipDoc(SCDOCMODE_CLIP
);
686 copyToClip(m_pDoc
, aSrcRange
, &aClipDoc
);
689 ScDocumentUniquePtr
pTransClip(new ScDocument(SCDOCMODE_CLIP
));
690 aClipDoc
.TransposeClip(pTransClip
.get(), InsertDeleteFlags::CONTENTS
, true, false);
692 ScRange
aDestRange(1, 1, destSheet
, 4, 1, destSheet
); // Paste to B2:E2 on Sheet2.
693 ScMarkData
aMark(m_pDoc
->GetSheetLimits());
694 aMark
.SetMarkArea(aDestRange
);
695 m_pDoc
->CopyFromClip(aDestRange
, aMark
, InsertDeleteFlags::CONTENTS
, nullptr, pTransClip
.get(),
699 // Check pasted content to make sure they reference the correct cells.
700 ScFormulaCell
* pFC
= m_pDoc
->GetFormulaCell(ScAddress(1, 1, destSheet
));
701 CPPUNIT_ASSERT_MESSAGE("This should be a formula cell B2.", pFC
);
702 CPPUNIT_ASSERT_EQUAL_MESSAGE("Cell B2", u
"=$Sheet1.$A$1"_ustr
,
703 m_pDoc
->GetFormula(1, 1, destSheet
));
704 CPPUNIT_ASSERT_EQUAL(1.0, pFC
->GetValue());
706 pFC
= m_pDoc
->GetFormulaCell(ScAddress(2, 1, destSheet
));
707 CPPUNIT_ASSERT_MESSAGE("This should be a formula cell.", pFC
);
708 CPPUNIT_ASSERT_EQUAL_MESSAGE("Cell C2", u
"=$Sheet1.$A$2"_ustr
,
709 m_pDoc
->GetFormula(2, 1, destSheet
));
710 CPPUNIT_ASSERT_EQUAL(2.0, pFC
->GetValue());
712 pFC
= m_pDoc
->GetFormulaCell(ScAddress(3, 1, destSheet
));
713 CPPUNIT_ASSERT_MESSAGE("This should be no formula cell D2.", !pFC
);
715 pFC
= m_pDoc
->GetFormulaCell(ScAddress(4, 1, destSheet
));
716 CPPUNIT_ASSERT_MESSAGE("This should be a formula cell.", pFC
);
717 CPPUNIT_ASSERT_EQUAL_MESSAGE("Cell E2", u
"=$Sheet1.$A$4"_ustr
,
718 m_pDoc
->GetFormula(4, 1, destSheet
));
719 CPPUNIT_ASSERT_EQUAL(4.0, pFC
->GetValue());
721 m_pDoc
->DeleteTab(destSheet
);
722 m_pDoc
->DeleteTab(srcSheet
);
725 // InsertDeleteFlags::CONTENTS
726 CPPUNIT_TEST_FIXTURE(TestCopyPaste
, testCopyPasteSpecialAsLinkFilteredTranspose
)
728 const SCTAB srcSheet
= 0;
729 const SCTAB destSheet
= 1;
731 sc::AutoCalcSwitch
aACSwitch(*m_pDoc
, true); // Turn on auto calc.
733 m_pDoc
->InsertTab(srcSheet
, u
"Sheet1"_ustr
);
734 m_pDoc
->InsertTab(destSheet
, u
"Sheet2"_ustr
);
736 m_pDoc
->SetValue(0, 0, srcSheet
, 1); // A1
737 m_pDoc
->SetValue(0, 1, srcSheet
, 2); // A2
738 m_pDoc
->SetValue(0, 3, srcSheet
, 4); // A4
741 ScDBData
* pDBData
= new ScDBData(u
"TRANSPOSE_TEST_DATA"_ustr
, srcSheet
, 0, 0, 0, 3);
742 m_pDoc
->SetAnonymousDBData(0, std::unique_ptr
<ScDBData
>(pDBData
));
744 pDBData
->SetAutoFilter(true);
746 pDBData
->GetArea(aRange
);
747 m_pDoc
->ApplyFlagsTab(aRange
.aStart
.Col(), aRange
.aStart
.Row(), aRange
.aEnd
.Col(),
748 aRange
.aStart
.Row(), aRange
.aStart
.Tab(), ScMF::Auto
);
750 //create the query param
752 pDBData
->GetQueryParam(aParam
);
753 ScQueryEntry
& rEntry
= aParam
.GetEntry(0);
754 rEntry
.bDoQuery
= true;
756 rEntry
.eOp
= SC_NOT_EQUAL
;
757 rEntry
.GetQueryItem().mfVal
= 2; // value of row A2 -> filtering row 1
758 // add queryParam to database range.
759 pDBData
->SetQueryParam(aParam
);
761 // perform the query.
762 m_pDoc
->Query(srcSheet
, aParam
, true);
764 // Check precondition for test: row 1 is hidden/filtered
766 SCROW nFilteredRow1
, nFilteredRow2
;
767 bool bHidden
= m_pDoc
->RowHidden(SCROW(1), srcSheet
, &nRow1
, &nRow2
);
768 CPPUNIT_ASSERT_MESSAGE("row 1 should be hidden", bHidden
);
769 CPPUNIT_ASSERT_EQUAL_MESSAGE("row 1 should be hidden", SCROW(1), nRow1
);
770 CPPUNIT_ASSERT_EQUAL_MESSAGE("row 1 should be hidden", SCROW(1), nRow2
);
771 bool bFiltered
= m_pDoc
->RowFiltered(SCROW(1), srcSheet
, &nFilteredRow1
, &nFilteredRow2
);
772 CPPUNIT_ASSERT_MESSAGE("row 1 should be filtered", bFiltered
);
773 CPPUNIT_ASSERT_EQUAL_MESSAGE("row 1 should be filtered", SCROW(1), nFilteredRow1
);
774 CPPUNIT_ASSERT_EQUAL_MESSAGE("row 1 should be filtered", SCROW(1), nFilteredRow2
);
776 // Copy A1:A4 to clip.
777 ScRange
aSrcRange(0, 0, srcSheet
, 0, 3, srcSheet
);
778 ScDocument
aClipDoc(SCDOCMODE_CLIP
);
779 copyToClip(m_pDoc
, aSrcRange
, &aClipDoc
);
782 ScDocumentUniquePtr
pTransClip(new ScDocument(SCDOCMODE_CLIP
));
783 aClipDoc
.TransposeClip(pTransClip
.get(), InsertDeleteFlags::CONTENTS
, true, false);
785 ScRange
aDestRange(1, 1, destSheet
, 3, 1, destSheet
); // Paste to B2:D2 on Sheet2.
786 ScMarkData
aMark(m_pDoc
->GetSheetLimits());
787 aMark
.SetMarkArea(aDestRange
);
788 m_pDoc
->CopyFromClip(aDestRange
, aMark
, InsertDeleteFlags::CONTENTS
, nullptr, pTransClip
.get(),
792 // Check pasted content to make sure they reference the correct cells.
793 ScFormulaCell
* pFC
= m_pDoc
->GetFormulaCell(ScAddress(1, 1, destSheet
));
794 CPPUNIT_ASSERT_MESSAGE("This should be a formula cell B2.", pFC
);
795 CPPUNIT_ASSERT_EQUAL_MESSAGE("Cell B2", u
"=$Sheet1.$A$1"_ustr
,
796 m_pDoc
->GetFormula(1, 1, destSheet
));
797 CPPUNIT_ASSERT_EQUAL(1.0, pFC
->GetValue());
799 pFC
= m_pDoc
->GetFormulaCell(ScAddress(2, 1, destSheet
));
800 CPPUNIT_ASSERT_MESSAGE("This should be no formula cell C2.", !pFC
);
802 pFC
= m_pDoc
->GetFormulaCell(ScAddress(3, 1, destSheet
));
803 CPPUNIT_ASSERT_MESSAGE("This should be a formula cell.", pFC
);
804 CPPUNIT_ASSERT_EQUAL_MESSAGE("Cell D2", u
"=$Sheet1.$A$4"_ustr
,
805 m_pDoc
->GetFormula(3, 1, destSheet
));
806 CPPUNIT_ASSERT_EQUAL(4.0, pFC
->GetValue());
808 m_pDoc
->DeleteTab(destSheet
);
809 m_pDoc
->DeleteTab(srcSheet
);
813 // InsertDeleteFlags::VALUE
814 CPPUNIT_TEST_FIXTURE(TestCopyPaste
, testCopyPasteSpecialMultiRangeRowAsLinkTranspose
)
816 const SCTAB srcSheet
= 0;
817 const SCTAB destSheet
= 1;
819 sc::AutoCalcSwitch
aACSwitch(*m_pDoc
, true); // Turn on auto calc.
821 m_pDoc
->InsertTab(srcSheet
, u
"Sheet1"_ustr
);
822 m_pDoc
->InsertTab(destSheet
, u
"Sheet2"_ustr
);
824 m_pDoc
->SetValue(0, 0, srcSheet
, 1); // A1
825 m_pDoc
->SetValue(1, 0, srcSheet
, 2); // B1
826 m_pDoc
->SetValue(3, 0, srcSheet
, 4); // D1
828 m_pDoc
->SetValue(0, 2, srcSheet
, 11); // A3
829 m_pDoc
->SetValue(1, 2, srcSheet
, 12); // B3
830 m_pDoc
->SetValue(3, 2, srcSheet
, 14); // D3
832 ScMarkData
aSrcMark(m_pDoc
->GetSheetLimits());
833 aSrcMark
.SelectOneTable(0);
834 ScClipParam aClipParam
;
835 aClipParam
.meDirection
= ScClipParam::Row
;
836 aClipParam
.maRanges
.push_back(ScRange(0, 0, srcSheet
, 3, 0, srcSheet
)); // A1:D1
837 aClipParam
.maRanges
.push_back(ScRange(0, 2, srcSheet
, 3, 2, srcSheet
)); // A3:D3
839 ScDocument
aClipDoc(SCDOCMODE_CLIP
);
840 m_pDoc
->CopyToClip(aClipParam
, &aClipDoc
, &aSrcMark
, false, false);
843 ScDocumentUniquePtr
pTransClip(new ScDocument(SCDOCMODE_CLIP
));
844 aClipDoc
.TransposeClip(pTransClip
.get(), InsertDeleteFlags::VALUE
, true, false);
846 ScRange
aDestRange(1, 1, destSheet
, 2, 4, destSheet
); // Paste to B2:C5 on Sheet2.
847 ScMarkData
aMark(m_pDoc
->GetSheetLimits());
848 aMark
.SetMarkArea(aDestRange
);
849 m_pDoc
->CopyMultiRangeFromClip(
850 ScAddress(1, 1, destSheet
), aMark
, InsertDeleteFlags::VALUE
| InsertDeleteFlags::FORMULA
,
851 pTransClip
.get(), true, false /* false fixes tdf#141683 */, false, false);
854 // Check pasted content to make sure they reference the correct cells.
855 ScFormulaCell
* pFC
= m_pDoc
->GetFormulaCell(ScAddress(1, 1, destSheet
));
856 CPPUNIT_ASSERT_MESSAGE("This should be a formula cell B2.", pFC
);
857 CPPUNIT_ASSERT_EQUAL_MESSAGE("Cell B2", u
"=$Sheet1.$A$1"_ustr
,
858 m_pDoc
->GetFormula(1, 1, destSheet
));
859 CPPUNIT_ASSERT_EQUAL(1.0, pFC
->GetValue());
861 pFC
= m_pDoc
->GetFormulaCell(ScAddress(1, 2, destSheet
));
862 CPPUNIT_ASSERT_MESSAGE("This should be a formula cell B3.", pFC
);
863 CPPUNIT_ASSERT_EQUAL_MESSAGE("Cell B3", u
"=$Sheet1.$B$1"_ustr
,
864 m_pDoc
->GetFormula(1, 2, destSheet
));
865 CPPUNIT_ASSERT_EQUAL(2.0, pFC
->GetValue());
867 pFC
= m_pDoc
->GetFormulaCell(ScAddress(1, 3, destSheet
));
868 CPPUNIT_ASSERT_MESSAGE("This should be no formula cell B4.", !pFC
);
870 pFC
= m_pDoc
->GetFormulaCell(ScAddress(1, 4, destSheet
));
871 CPPUNIT_ASSERT_MESSAGE("This should be a formula cell.", pFC
);
872 CPPUNIT_ASSERT_EQUAL_MESSAGE("Cell B5", u
"=$Sheet1.$D$1"_ustr
,
873 m_pDoc
->GetFormula(1, 4, destSheet
));
874 CPPUNIT_ASSERT_EQUAL(4.0, pFC
->GetValue());
876 pFC
= m_pDoc
->GetFormulaCell(ScAddress(2, 1, destSheet
));
877 CPPUNIT_ASSERT_MESSAGE("This should be a formula cell C2.", pFC
);
878 CPPUNIT_ASSERT_EQUAL_MESSAGE("Cell C2", u
"=$Sheet1.$A$3"_ustr
,
879 m_pDoc
->GetFormula(2, 1, destSheet
));
880 CPPUNIT_ASSERT_EQUAL(11.0, pFC
->GetValue());
882 pFC
= m_pDoc
->GetFormulaCell(ScAddress(2, 2, destSheet
));
883 CPPUNIT_ASSERT_MESSAGE("This should be a formula cell C3.", pFC
);
884 CPPUNIT_ASSERT_EQUAL_MESSAGE("Cell C3", u
"=$Sheet1.$B$3"_ustr
,
885 m_pDoc
->GetFormula(2, 2, destSheet
));
886 CPPUNIT_ASSERT_EQUAL(12.0, pFC
->GetValue());
888 pFC
= m_pDoc
->GetFormulaCell(ScAddress(2, 3, destSheet
));
889 CPPUNIT_ASSERT_MESSAGE("This should be no formula cell C4.", !pFC
);
891 pFC
= m_pDoc
->GetFormulaCell(ScAddress(2, 4, destSheet
));
892 CPPUNIT_ASSERT_MESSAGE("This should be a formula cell.", pFC
);
893 CPPUNIT_ASSERT_EQUAL_MESSAGE("Cell C5", u
"=$Sheet1.$D$3"_ustr
,
894 m_pDoc
->GetFormula(2, 4, destSheet
));
895 CPPUNIT_ASSERT_EQUAL(14.0, pFC
->GetValue());
897 m_pDoc
->DeleteTab(destSheet
);
898 m_pDoc
->DeleteTab(srcSheet
);
902 // InsertDeleteFlags::VALUE
903 CPPUNIT_TEST_FIXTURE(TestCopyPaste
, testCopyPasteSpecialMultiRangeRowAsLinkFilteredTranspose
)
905 const SCTAB srcSheet
= 0;
906 const SCTAB destSheet
= 1;
908 sc::AutoCalcSwitch
aACSwitch(*m_pDoc
, true); // Turn on auto calc.
910 m_pDoc
->InsertTab(srcSheet
, u
"Sheet1"_ustr
);
911 m_pDoc
->InsertTab(destSheet
, u
"Sheet2"_ustr
);
913 m_pDoc
->SetValue(0, 0, srcSheet
, 1); // A1
914 m_pDoc
->SetValue(1, 0, srcSheet
, 2); // B1
915 m_pDoc
->SetValue(3, 0, srcSheet
, 4); // D1
917 m_pDoc
->SetValue(0, 1, srcSheet
, -1); // A2, filtered and selected
918 m_pDoc
->SetValue(1, 1, srcSheet
, -2); // B2, filtered and selected
919 m_pDoc
->SetValue(3, 1, srcSheet
, -4); // D2, filtered and selected
921 m_pDoc
->SetValue(0, 2, srcSheet
, 11); // A3
922 m_pDoc
->SetValue(1, 2, srcSheet
, 12); // B3
923 m_pDoc
->SetValue(3, 2, srcSheet
, 14); // D3
925 m_pDoc
->SetValue(0, 3, srcSheet
, -11); // A4, filtered and not selected
926 m_pDoc
->SetValue(1, 3, srcSheet
, -12); // B4, filtered and not selected
927 m_pDoc
->SetValue(3, 3, srcSheet
, -14); // D4, filtered and not selected
929 m_pDoc
->SetValue(0, 5, srcSheet
, 111); // A6
930 m_pDoc
->SetValue(1, 5, srcSheet
, 112); // B6
931 m_pDoc
->SetValue(3, 5, srcSheet
, 114); // D6
934 ScDBData
* pDBData
= new ScDBData(u
"TRANSPOSE_TEST_DATA"_ustr
, srcSheet
, 0, 0, 3, 3);
935 m_pDoc
->SetAnonymousDBData(0, std::unique_ptr
<ScDBData
>(pDBData
));
937 pDBData
->SetAutoFilter(true);
939 pDBData
->GetArea(aRange
);
940 m_pDoc
->ApplyFlagsTab(aRange
.aStart
.Col(), aRange
.aStart
.Row(), aRange
.aEnd
.Col(),
941 aRange
.aStart
.Row(), aRange
.aStart
.Tab(), ScMF::Auto
);
943 //create the query param
945 pDBData
->GetQueryParam(aParam
);
946 ScQueryEntry
& rEntry
= aParam
.GetEntry(0);
947 rEntry
.bDoQuery
= true;
949 rEntry
.eOp
= SC_GREATER_EQUAL
;
950 rEntry
.GetQueryItem().mfVal
= 0; // filtering negative values -> filtering row 1 and 2
951 // add queryParam to database range.
952 pDBData
->SetQueryParam(aParam
);
954 // perform the query.
955 m_pDoc
->Query(srcSheet
, aParam
, true);
957 ScMarkData
aSrcMark(m_pDoc
->GetSheetLimits());
958 aSrcMark
.SelectOneTable(0);
959 ScClipParam aClipParam
;
960 aClipParam
.meDirection
= ScClipParam::Row
;
961 aClipParam
.maRanges
.push_back(ScRange(0, 0, srcSheet
, 3, 2, srcSheet
)); // A1:C3
962 aClipParam
.maRanges
.push_back(ScRange(0, 5, srcSheet
, 3, 5, srcSheet
)); // A6:C6
964 ScDocument
aClipDoc(SCDOCMODE_CLIP
);
965 m_pDoc
->CopyToClip(aClipParam
, &aClipDoc
, &aSrcMark
, false, false);
967 printRange(m_pDoc
, aClipParam
.getWholeRange(), "Src range");
969 ScDocumentUniquePtr
pTransClip(new ScDocument(SCDOCMODE_CLIP
));
970 aClipDoc
.TransposeClip(pTransClip
.get(), InsertDeleteFlags::VALUE
, true, false);
972 printRange(&aClipDoc
, ScRange(0, 0, 0, 4, 5, 0), "Base doc (&aClipDoc)");
973 printRange(pTransClip
.get(), ScRange(0, 0, 0, 3, 3, 0),
974 "Transposed filtered clipdoc (pTransClip.get())");
975 ScRange
aDestRange(1, 1, destSheet
, 3, 4, destSheet
); // Paste to B2:D5 on Sheet2.
976 ScMarkData
aMark(m_pDoc
->GetSheetLimits());
977 aMark
.SetMarkArea(aDestRange
);
978 m_pDoc
->CopyMultiRangeFromClip(
979 ScAddress(1, 1, destSheet
), aMark
, InsertDeleteFlags::VALUE
| InsertDeleteFlags::FORMULA
,
980 pTransClip
.get(), true, false /* false fixes tdf#141683 */, false, false);
982 printRange(m_pDoc
, aDestRange
, "Transposed dest sheet");
984 // Check pasted content to make sure they reference the correct cells.
985 ScFormulaCell
* pFC
= m_pDoc
->GetFormulaCell(ScAddress(1, 1, destSheet
));
986 CPPUNIT_ASSERT_MESSAGE("This should be a formula cell B2.", pFC
);
987 CPPUNIT_ASSERT_EQUAL_MESSAGE("Cell B2", u
"=$Sheet1.$A$1"_ustr
,
988 m_pDoc
->GetFormula(1, 1, destSheet
));
989 CPPUNIT_ASSERT_EQUAL(1.0, pFC
->GetValue());
991 pFC
= m_pDoc
->GetFormulaCell(ScAddress(1, 2, destSheet
));
992 CPPUNIT_ASSERT_MESSAGE("This should be a formula cell B3.", pFC
);
993 CPPUNIT_ASSERT_EQUAL_MESSAGE("Cell B3", u
"=$Sheet1.$B$1"_ustr
,
994 m_pDoc
->GetFormula(1, 2, destSheet
));
995 CPPUNIT_ASSERT_EQUAL(2.0, pFC
->GetValue());
997 pFC
= m_pDoc
->GetFormulaCell(ScAddress(1, 3, destSheet
));
998 CPPUNIT_ASSERT_MESSAGE("This should be no formula cell B4.", !pFC
);
1000 pFC
= m_pDoc
->GetFormulaCell(ScAddress(1, 4, destSheet
));
1001 CPPUNIT_ASSERT_MESSAGE("This should be a formula cell.", pFC
);
1002 CPPUNIT_ASSERT_EQUAL_MESSAGE("Cell B5", u
"=$Sheet1.$D$1"_ustr
,
1003 m_pDoc
->GetFormula(1, 4, destSheet
));
1004 CPPUNIT_ASSERT_EQUAL(4.0, pFC
->GetValue());
1006 pFC
= m_pDoc
->GetFormulaCell(ScAddress(2, 1, destSheet
));
1007 CPPUNIT_ASSERT_MESSAGE("This should be a formula cell C2.", pFC
);
1008 CPPUNIT_ASSERT_EQUAL_MESSAGE("Cell C2", u
"=$Sheet1.$A$3"_ustr
,
1009 m_pDoc
->GetFormula(2, 1, destSheet
));
1010 CPPUNIT_ASSERT_EQUAL(11.0, pFC
->GetValue());
1012 pFC
= m_pDoc
->GetFormulaCell(ScAddress(2, 2, destSheet
));
1013 CPPUNIT_ASSERT_MESSAGE("This should be a formula cell C3.", pFC
);
1014 CPPUNIT_ASSERT_EQUAL_MESSAGE("Cell C3", u
"=$Sheet1.$B$3"_ustr
,
1015 m_pDoc
->GetFormula(2, 2, destSheet
));
1016 CPPUNIT_ASSERT_EQUAL(12.0, pFC
->GetValue());
1018 pFC
= m_pDoc
->GetFormulaCell(ScAddress(2, 3, destSheet
));
1019 CPPUNIT_ASSERT_MESSAGE("This should be no formula cell C4.", !pFC
);
1021 pFC
= m_pDoc
->GetFormulaCell(ScAddress(2, 4, destSheet
));
1022 CPPUNIT_ASSERT_MESSAGE("This should be a formula cell.", pFC
);
1023 CPPUNIT_ASSERT_EQUAL_MESSAGE("Cell C5", u
"=$Sheet1.$D$3"_ustr
,
1024 m_pDoc
->GetFormula(2, 4, destSheet
));
1025 CPPUNIT_ASSERT_EQUAL(14.0, pFC
->GetValue());
1027 pFC
= m_pDoc
->GetFormulaCell(ScAddress(3, 1, destSheet
));
1028 CPPUNIT_ASSERT_MESSAGE("This should be a formula cell D2.", pFC
);
1029 CPPUNIT_ASSERT_EQUAL_MESSAGE("Cell D2", u
"=$Sheet1.$A$6"_ustr
,
1030 m_pDoc
->GetFormula(3, 1, destSheet
));
1031 CPPUNIT_ASSERT_EQUAL(111.0, pFC
->GetValue());
1033 pFC
= m_pDoc
->GetFormulaCell(ScAddress(3, 2, destSheet
));
1034 CPPUNIT_ASSERT_MESSAGE("This should be a formula cell D3.", pFC
);
1035 CPPUNIT_ASSERT_EQUAL_MESSAGE("Cell D3", u
"=$Sheet1.$B$6"_ustr
,
1036 m_pDoc
->GetFormula(3, 2, destSheet
));
1037 CPPUNIT_ASSERT_EQUAL(112.0, pFC
->GetValue());
1039 pFC
= m_pDoc
->GetFormulaCell(ScAddress(3, 3, destSheet
));
1040 CPPUNIT_ASSERT_MESSAGE("This should be no formula cell D4.", !pFC
);
1042 pFC
= m_pDoc
->GetFormulaCell(ScAddress(3, 4, destSheet
));
1043 CPPUNIT_ASSERT_MESSAGE("This should be a formula cell.", pFC
);
1044 CPPUNIT_ASSERT_EQUAL_MESSAGE("Cell D5", u
"=$Sheet1.$D$6"_ustr
,
1045 m_pDoc
->GetFormula(3, 4, destSheet
));
1046 CPPUNIT_ASSERT_EQUAL(114.0, pFC
->GetValue());
1048 m_pDoc
->DeleteTab(destSheet
);
1049 m_pDoc
->DeleteTab(srcSheet
);
1053 // InsertDeleteFlags::VALUE
1054 CPPUNIT_TEST_FIXTURE(TestCopyPaste
, testCopyPasteSpecialMultiRangeColAsLinkTranspose
)
1056 const SCTAB srcSheet
= 0;
1057 const SCTAB destSheet
= 1;
1059 sc::AutoCalcSwitch
aACSwitch(*m_pDoc
, true); // Turn on auto calc.
1061 m_pDoc
->InsertTab(srcSheet
, u
"Sheet1"_ustr
);
1062 m_pDoc
->InsertTab(destSheet
, u
"Sheet2"_ustr
);
1064 m_pDoc
->SetValue(0, 0, srcSheet
, 1); // A1
1065 m_pDoc
->SetValue(0, 1, srcSheet
, 2); // A2
1066 m_pDoc
->SetValue(0, 3, srcSheet
, 4); // A4
1068 m_pDoc
->SetValue(2, 0, srcSheet
, 11); // C1
1069 m_pDoc
->SetValue(2, 1, srcSheet
, 12); // C2
1070 m_pDoc
->SetValue(2, 3, srcSheet
, 14); // C4
1072 ScMarkData
aSrcMark(m_pDoc
->GetSheetLimits());
1073 aSrcMark
.SelectOneTable(0);
1074 ScClipParam aClipParam
;
1075 aClipParam
.meDirection
= ScClipParam::Column
;
1076 aClipParam
.maRanges
.push_back(ScRange(0, 0, srcSheet
, 0, 3, srcSheet
)); // A1:A4
1077 aClipParam
.maRanges
.push_back(ScRange(2, 0, srcSheet
, 2, 3, srcSheet
)); // C1:C4
1079 ScDocument
aClipDoc(SCDOCMODE_CLIP
);
1080 m_pDoc
->CopyToClip(aClipParam
, &aClipDoc
, &aSrcMark
, false, false);
1083 ScDocumentUniquePtr
pTransClip(new ScDocument(SCDOCMODE_CLIP
));
1084 aClipDoc
.TransposeClip(pTransClip
.get(), InsertDeleteFlags::VALUE
, true, false);
1086 ScRange
aDestRange(1, 1, destSheet
, 4, 2, destSheet
); // Paste to B2:E3 on Sheet2.
1087 ScMarkData
aMark(m_pDoc
->GetSheetLimits());
1088 aMark
.SetMarkArea(aDestRange
);
1089 m_pDoc
->CopyMultiRangeFromClip(
1090 ScAddress(1, 1, destSheet
), aMark
, InsertDeleteFlags::VALUE
| InsertDeleteFlags::FORMULA
,
1091 pTransClip
.get(), true, false /* false fixes tdf#141683 */, false, false);
1094 // Check pasted content to make sure they reference the correct cells.
1095 ScFormulaCell
* pFC
= m_pDoc
->GetFormulaCell(ScAddress(1, 1, destSheet
));
1096 CPPUNIT_ASSERT_MESSAGE("This should be a formula cell B2.", pFC
);
1097 CPPUNIT_ASSERT_EQUAL_MESSAGE("Cell B2", u
"=$Sheet1.$A$1"_ustr
,
1098 m_pDoc
->GetFormula(1, 1, destSheet
));
1099 CPPUNIT_ASSERT_EQUAL(1.0, pFC
->GetValue());
1101 pFC
= m_pDoc
->GetFormulaCell(ScAddress(2, 1, destSheet
));
1102 CPPUNIT_ASSERT_MESSAGE("This should be a formula cell C2.", pFC
);
1103 CPPUNIT_ASSERT_EQUAL_MESSAGE("Cell C2", u
"=$Sheet1.$A$2"_ustr
,
1104 m_pDoc
->GetFormula(2, 1, destSheet
));
1105 CPPUNIT_ASSERT_EQUAL(2.0, pFC
->GetValue());
1107 pFC
= m_pDoc
->GetFormulaCell(ScAddress(3, 1, destSheet
));
1108 CPPUNIT_ASSERT_MESSAGE("This should be no formula cell D2.", !pFC
);
1110 pFC
= m_pDoc
->GetFormulaCell(ScAddress(4, 1, destSheet
));
1111 CPPUNIT_ASSERT_MESSAGE("This should be a formula cell.", pFC
);
1112 CPPUNIT_ASSERT_EQUAL_MESSAGE("Cell E2", u
"=$Sheet1.$A$4"_ustr
,
1113 m_pDoc
->GetFormula(4, 1, destSheet
));
1114 CPPUNIT_ASSERT_EQUAL(4.0, pFC
->GetValue());
1116 pFC
= m_pDoc
->GetFormulaCell(ScAddress(1, 2, destSheet
));
1117 CPPUNIT_ASSERT_MESSAGE("This should be a formula cell B3.", pFC
);
1118 CPPUNIT_ASSERT_EQUAL_MESSAGE("Cell B3", u
"=$Sheet1.$C$1"_ustr
,
1119 m_pDoc
->GetFormula(1, 2, destSheet
));
1120 CPPUNIT_ASSERT_EQUAL(11.0, pFC
->GetValue());
1122 pFC
= m_pDoc
->GetFormulaCell(ScAddress(2, 2, destSheet
));
1123 CPPUNIT_ASSERT_MESSAGE("This should be a formula cell C3.", pFC
);
1124 CPPUNIT_ASSERT_EQUAL_MESSAGE("Cell C3", u
"=$Sheet1.$C$2"_ustr
,
1125 m_pDoc
->GetFormula(2, 2, destSheet
));
1126 CPPUNIT_ASSERT_EQUAL(12.0, pFC
->GetValue());
1128 pFC
= m_pDoc
->GetFormulaCell(ScAddress(3, 2, destSheet
));
1129 CPPUNIT_ASSERT_MESSAGE("This should be no formula cell D3.", !pFC
);
1131 pFC
= m_pDoc
->GetFormulaCell(ScAddress(4, 2, destSheet
));
1132 CPPUNIT_ASSERT_MESSAGE("This should be a formula cell.", pFC
);
1133 CPPUNIT_ASSERT_EQUAL_MESSAGE("Cell E3", u
"=$Sheet1.$C$4"_ustr
,
1134 m_pDoc
->GetFormula(4, 2, destSheet
));
1135 CPPUNIT_ASSERT_EQUAL(14.0, pFC
->GetValue());
1137 m_pDoc
->DeleteTab(destSheet
);
1138 m_pDoc
->DeleteTab(srcSheet
);
1142 // InsertDeleteFlags::VALUE
1143 CPPUNIT_TEST_FIXTURE(TestCopyPaste
, testCopyPasteSpecialMultiRangeColAsLinkFilteredTranspose
)
1145 const SCTAB srcSheet
= 0;
1146 const SCTAB destSheet
= 1;
1148 sc::AutoCalcSwitch
aACSwitch(*m_pDoc
, true); // Turn on auto calc.
1150 m_pDoc
->InsertTab(srcSheet
, u
"Sheet1"_ustr
);
1151 m_pDoc
->InsertTab(destSheet
, u
"Sheet2"_ustr
);
1153 m_pDoc
->SetValue(0, 0, srcSheet
, 1); // A1
1154 m_pDoc
->SetValue(0, 1, srcSheet
, 2); // A2
1155 m_pDoc
->SetValue(0, 3, srcSheet
, 4); // A4
1157 m_pDoc
->SetValue(2, 0, srcSheet
, 11); // C1
1158 m_pDoc
->SetValue(2, 1, srcSheet
, 12); // C2
1159 m_pDoc
->SetValue(2, 3, srcSheet
, 14); // C4
1162 ScDBData
* pDBData
= new ScDBData(u
"TRANSPOSE_TEST_DATA"_ustr
, srcSheet
, 0, 0, 0, 3);
1163 m_pDoc
->SetAnonymousDBData(0, std::unique_ptr
<ScDBData
>(pDBData
));
1165 pDBData
->SetAutoFilter(true);
1167 pDBData
->GetArea(aRange
);
1168 m_pDoc
->ApplyFlagsTab(aRange
.aStart
.Col(), aRange
.aStart
.Row(), aRange
.aEnd
.Col(),
1169 aRange
.aStart
.Row(), aRange
.aStart
.Tab(), ScMF::Auto
);
1171 //create the query param
1172 ScQueryParam aParam
;
1173 pDBData
->GetQueryParam(aParam
);
1174 ScQueryEntry
& rEntry
= aParam
.GetEntry(0);
1175 rEntry
.bDoQuery
= true;
1177 rEntry
.eOp
= SC_NOT_EQUAL
;
1178 rEntry
.GetQueryItem().mfVal
= 2; // value of row A2 -> filtering row 1
1179 // add queryParam to database range.
1180 pDBData
->SetQueryParam(aParam
);
1182 // perform the query.
1183 m_pDoc
->Query(srcSheet
, aParam
, true);
1185 ScMarkData
aSrcMark(m_pDoc
->GetSheetLimits());
1186 aSrcMark
.SelectOneTable(0);
1187 ScClipParam aClipParam
;
1188 aClipParam
.meDirection
= ScClipParam::Column
;
1189 aClipParam
.maRanges
.push_back(ScRange(0, 0, srcSheet
, 0, 3, srcSheet
)); // A1:A4
1190 aClipParam
.maRanges
.push_back(ScRange(2, 0, srcSheet
, 2, 3, srcSheet
)); // C1:C4
1192 ScDocument
aClipDoc(SCDOCMODE_CLIP
);
1193 m_pDoc
->CopyToClip(aClipParam
, &aClipDoc
, &aSrcMark
, false, false);
1196 ScDocumentUniquePtr
pTransClip(new ScDocument(SCDOCMODE_CLIP
));
1197 aClipDoc
.TransposeClip(pTransClip
.get(), InsertDeleteFlags::VALUE
, true, false);
1199 ScRange
aDestRange(1, 1, destSheet
, 4, 2, destSheet
); // Paste to B2:E3 on Sheet2.
1200 ScMarkData
aMark(m_pDoc
->GetSheetLimits());
1201 aMark
.SetMarkArea(aDestRange
);
1202 m_pDoc
->CopyMultiRangeFromClip(
1203 ScAddress(1, 1, destSheet
), aMark
, InsertDeleteFlags::VALUE
| InsertDeleteFlags::FORMULA
,
1204 pTransClip
.get(), true, false /* false fixes tdf#141683 */, false, false);
1207 // Check pasted content to make sure they reference the correct cells.
1208 ScFormulaCell
* pFC
= m_pDoc
->GetFormulaCell(ScAddress(1, 1, destSheet
));
1209 CPPUNIT_ASSERT_MESSAGE("This should be a formula cell B2.", pFC
);
1210 CPPUNIT_ASSERT_EQUAL_MESSAGE("Cell B2", u
"=$Sheet1.$A$1"_ustr
,
1211 m_pDoc
->GetFormula(1, 1, destSheet
));
1212 CPPUNIT_ASSERT_EQUAL(1.0, pFC
->GetValue());
1214 pFC
= m_pDoc
->GetFormulaCell(ScAddress(2, 1, destSheet
));
1215 CPPUNIT_ASSERT_MESSAGE("This should be no formula cell C2.", !pFC
);
1217 pFC
= m_pDoc
->GetFormulaCell(ScAddress(3, 1, destSheet
));
1218 CPPUNIT_ASSERT_MESSAGE("This should be a formula cell.", pFC
);
1219 CPPUNIT_ASSERT_EQUAL_MESSAGE("Cell D2", u
"=$Sheet1.$A$4"_ustr
,
1220 m_pDoc
->GetFormula(3, 1, destSheet
));
1221 CPPUNIT_ASSERT_EQUAL(4.0, pFC
->GetValue());
1223 pFC
= m_pDoc
->GetFormulaCell(ScAddress(1, 2, destSheet
));
1224 CPPUNIT_ASSERT_MESSAGE("This should be a formula cell B3.", pFC
);
1225 CPPUNIT_ASSERT_EQUAL_MESSAGE("Cell B3", u
"=$Sheet1.$C$1"_ustr
,
1226 m_pDoc
->GetFormula(1, 2, destSheet
));
1227 CPPUNIT_ASSERT_EQUAL(11.0, pFC
->GetValue());
1229 pFC
= m_pDoc
->GetFormulaCell(ScAddress(2, 2, destSheet
));
1230 CPPUNIT_ASSERT_MESSAGE("This should be no formula cell C3.", !pFC
);
1232 pFC
= m_pDoc
->GetFormulaCell(ScAddress(3, 2, destSheet
));
1233 CPPUNIT_ASSERT_MESSAGE("This should be a formula cell.", pFC
);
1234 CPPUNIT_ASSERT_EQUAL_MESSAGE("Cell D3", u
"=$Sheet1.$C$4"_ustr
,
1235 m_pDoc
->GetFormula(3, 2, destSheet
));
1236 CPPUNIT_ASSERT_EQUAL(14.0, pFC
->GetValue());
1238 m_pDoc
->DeleteTab(destSheet
);
1239 m_pDoc
->DeleteTab(srcSheet
);
1242 // InsertDeleteFlags::ALL
1243 CPPUNIT_TEST_FIXTURE(TestCopyPaste
, testCopyPasteSpecialAllAsLinkTranspose
)
1245 const SCTAB srcSheet
= 0;
1246 const SCTAB destSheet
= 1;
1248 sc::AutoCalcSwitch
aACSwitch(*m_pDoc
, true); // Turn on auto calc.
1250 m_pDoc
->InsertTab(srcSheet
, u
"Sheet1"_ustr
);
1251 m_pDoc
->InsertTab(destSheet
, u
"Sheet2"_ustr
);
1253 m_pDoc
->SetValue(0, 0, srcSheet
, 1); // A1
1254 m_pDoc
->SetValue(0, 1, srcSheet
, 2); // A2
1255 m_pDoc
->SetValue(0, 3, srcSheet
, 4); // A4
1257 ScRange
aSrcRange(0, 0, srcSheet
, 0, 3, srcSheet
); // Copy A1:A4 to clip.
1258 ScDocument
aClipDoc(SCDOCMODE_CLIP
);
1259 copyToClip(m_pDoc
, aSrcRange
, &aClipDoc
);
1262 ScDocumentUniquePtr
pTransClip(new ScDocument(SCDOCMODE_CLIP
));
1263 aClipDoc
.TransposeClip(pTransClip
.get(), InsertDeleteFlags::ALL
, true, false);
1265 ScRange
aDestRange(1, 1, destSheet
, 4, 1, destSheet
); // Paste to B2:E2 on Sheet2.
1266 ScMarkData
aMark(m_pDoc
->GetSheetLimits());
1267 aMark
.SetMarkArea(aDestRange
);
1268 m_pDoc
->CopyFromClip(aDestRange
, aMark
, InsertDeleteFlags::ALL
, nullptr, pTransClip
.get(), true,
1272 // Check pasted content to make sure they reference the correct cells.
1273 ScFormulaCell
* pFC
= m_pDoc
->GetFormulaCell(ScAddress(1, 1, destSheet
));
1274 CPPUNIT_ASSERT_MESSAGE("This should be a formula cell B2.", pFC
);
1275 CPPUNIT_ASSERT_EQUAL_MESSAGE("Cell B2", u
"=$Sheet1.$A$1"_ustr
,
1276 m_pDoc
->GetFormula(1, 1, destSheet
));
1277 CPPUNIT_ASSERT_EQUAL(1.0, pFC
->GetValue());
1279 pFC
= m_pDoc
->GetFormulaCell(ScAddress(2, 1, destSheet
));
1280 CPPUNIT_ASSERT_MESSAGE("This should be a formula cell.", pFC
);
1281 CPPUNIT_ASSERT_EQUAL_MESSAGE("Cell C2", u
"=$Sheet1.$A$2"_ustr
,
1282 m_pDoc
->GetFormula(2, 1, destSheet
));
1283 CPPUNIT_ASSERT_EQUAL(2.0, pFC
->GetValue());
1285 pFC
= m_pDoc
->GetFormulaCell(ScAddress(3, 1, destSheet
));
1286 CPPUNIT_ASSERT_MESSAGE("This should be a formula cell.", pFC
);
1287 CPPUNIT_ASSERT_EQUAL_MESSAGE("Cell D2", u
"=$Sheet1.$A$3"_ustr
,
1288 m_pDoc
->GetFormula(3, 1, destSheet
));
1289 CPPUNIT_ASSERT_EQUAL(0.0, pFC
->GetValue());
1291 pFC
= m_pDoc
->GetFormulaCell(ScAddress(4, 1, destSheet
));
1292 CPPUNIT_ASSERT_MESSAGE("This should be a formula cell.", pFC
);
1293 CPPUNIT_ASSERT_EQUAL_MESSAGE("Cell E2", u
"=$Sheet1.$A$4"_ustr
,
1294 m_pDoc
->GetFormula(4, 1, destSheet
));
1295 CPPUNIT_ASSERT_EQUAL(4.0, pFC
->GetValue());
1297 m_pDoc
->DeleteTab(destSheet
);
1298 m_pDoc
->DeleteTab(srcSheet
);
1301 // InsertDeleteFlags::ALL
1302 CPPUNIT_TEST_FIXTURE(TestCopyPaste
, testCopyPasteSpecialAllAsLinkFilteredTranspose
)
1304 const SCTAB srcSheet
= 0;
1305 const SCTAB destSheet
= 1;
1307 sc::AutoCalcSwitch
aACSwitch(*m_pDoc
, true); // Turn on auto calc.
1309 m_pDoc
->InsertTab(srcSheet
, u
"Sheet1"_ustr
);
1310 m_pDoc
->InsertTab(destSheet
, u
"Sheet2"_ustr
);
1312 m_pDoc
->SetValue(0, 0, srcSheet
, 1); // A1
1313 m_pDoc
->SetValue(0, 1, srcSheet
, 2); // A2
1314 m_pDoc
->SetValue(0, 3, srcSheet
, 4); // A4
1317 ScDBData
* pDBData
= new ScDBData(u
"TRANSPOSE_TEST_DATA"_ustr
, srcSheet
, 0, 0, 0, 3);
1318 m_pDoc
->SetAnonymousDBData(0, std::unique_ptr
<ScDBData
>(pDBData
));
1320 pDBData
->SetAutoFilter(true);
1322 pDBData
->GetArea(aRange
);
1323 m_pDoc
->ApplyFlagsTab(aRange
.aStart
.Col(), aRange
.aStart
.Row(), aRange
.aEnd
.Col(),
1324 aRange
.aStart
.Row(), aRange
.aStart
.Tab(), ScMF::Auto
);
1326 //create the query param
1327 ScQueryParam aParam
;
1328 pDBData
->GetQueryParam(aParam
);
1329 ScQueryEntry
& rEntry
= aParam
.GetEntry(0);
1330 rEntry
.bDoQuery
= true;
1332 rEntry
.eOp
= SC_NOT_EQUAL
;
1333 rEntry
.GetQueryItem().mfVal
= 2; // value of row A2 -> filtering row 1
1334 // add queryParam to database range.
1335 pDBData
->SetQueryParam(aParam
);
1337 // perform the query.
1338 m_pDoc
->Query(srcSheet
, aParam
, true);
1340 // Check precondition for test: row 1 is hidden/filtered
1342 SCROW nFilteredRow1
, nFilteredRow2
;
1343 bool bHidden
= m_pDoc
->RowHidden(SCROW(1), srcSheet
, &nRow1
, &nRow2
);
1344 CPPUNIT_ASSERT_MESSAGE("row 1 should be hidden", bHidden
);
1345 CPPUNIT_ASSERT_EQUAL_MESSAGE("row 1 should be hidden", SCROW(1), nRow1
);
1346 CPPUNIT_ASSERT_EQUAL_MESSAGE("row 1 should be hidden", SCROW(1), nRow2
);
1347 bool bFiltered
= m_pDoc
->RowFiltered(SCROW(1), srcSheet
, &nFilteredRow1
, &nFilteredRow2
);
1348 CPPUNIT_ASSERT_MESSAGE("row 1 should be filtered", bFiltered
);
1349 CPPUNIT_ASSERT_EQUAL_MESSAGE("row 1 should be filtered", SCROW(1), nFilteredRow1
);
1350 CPPUNIT_ASSERT_EQUAL_MESSAGE("row 1 should be filtered", SCROW(1), nFilteredRow2
);
1352 // Copy A1:A4 to clip.
1353 ScRange
aSrcRange(0, 0, srcSheet
, 0, 3, srcSheet
);
1354 ScDocument
aClipDoc(SCDOCMODE_CLIP
);
1355 copyToClip(m_pDoc
, aSrcRange
, &aClipDoc
);
1358 ScDocumentUniquePtr
pTransClip(new ScDocument(SCDOCMODE_CLIP
));
1359 aClipDoc
.TransposeClip(pTransClip
.get(), InsertDeleteFlags::ALL
, true, false);
1361 ScRange
aDestRange(1, 1, destSheet
, 3, 1, destSheet
); // Paste to B2:D2 on Sheet2.
1362 ScMarkData
aMark(m_pDoc
->GetSheetLimits());
1363 aMark
.SetMarkArea(aDestRange
);
1364 m_pDoc
->CopyFromClip(aDestRange
, aMark
, InsertDeleteFlags::ALL
, nullptr, pTransClip
.get(), true,
1368 // Check pasted content to make sure they reference the correct cells.
1369 ScFormulaCell
* pFC
= m_pDoc
->GetFormulaCell(ScAddress(1, 1, destSheet
));
1370 CPPUNIT_ASSERT_MESSAGE("This should be a formula cell B2.", pFC
);
1371 CPPUNIT_ASSERT_EQUAL_MESSAGE("Cell B2", u
"=$Sheet1.$A$1"_ustr
,
1372 m_pDoc
->GetFormula(1, 1, destSheet
));
1373 CPPUNIT_ASSERT_EQUAL(1.0, pFC
->GetValue());
1375 pFC
= m_pDoc
->GetFormulaCell(ScAddress(2, 1, destSheet
));
1376 CPPUNIT_ASSERT_MESSAGE("This should be a formula cell.", pFC
);
1377 CPPUNIT_ASSERT_EQUAL_MESSAGE("Cell C2", u
"=$Sheet1.$A$3"_ustr
,
1378 m_pDoc
->GetFormula(2, 1, destSheet
));
1379 CPPUNIT_ASSERT_EQUAL(0.0, pFC
->GetValue());
1381 pFC
= m_pDoc
->GetFormulaCell(ScAddress(3, 1, destSheet
));
1382 CPPUNIT_ASSERT_MESSAGE("This should be a formula cell.", pFC
);
1383 CPPUNIT_ASSERT_EQUAL_MESSAGE("Cell D2", u
"=$Sheet1.$A$4"_ustr
,
1384 m_pDoc
->GetFormula(3, 1, destSheet
));
1385 CPPUNIT_ASSERT_EQUAL(4.0, pFC
->GetValue());
1387 m_pDoc
->DeleteTab(destSheet
);
1388 m_pDoc
->DeleteTab(srcSheet
);
1391 // Compatibility method since normal copy/paste tests do not test undo
1392 void TestCopyPaste::executeCopyPasteSpecial(bool bApplyFilter
, bool bIncludedFiltered
, bool bAsLink
,
1393 bool bTranspose
, bool bMultiRangeSelection
,
1394 bool bSkipEmpty
, bool bCut
,
1395 ScClipParam::Direction eDirection
, CalcMode eCalcMode
,
1396 InsertDeleteFlags aFlags
)
1398 std::unique_ptr
<ScUndoCut
> pUndoCut
;
1399 std::unique_ptr
<ScUndoPaste
> pUndoPaste
;
1400 executeCopyPasteSpecial(0, 1, bApplyFilter
, bIncludedFiltered
, bAsLink
, bTranspose
,
1401 bMultiRangeSelection
, bSkipEmpty
, pUndoCut
, pUndoPaste
, bCut
,
1402 eDirection
, eCalcMode
, aFlags
);
1405 // This method is used to create the different copy/paste special test cases.
1406 // Principle: Creation of test cases is parameterized, whereas checking uses a minimum of logic
1407 void TestCopyPaste::executeCopyPasteSpecial(const SCTAB srcSheet
, const SCTAB destSheet
,
1408 bool bApplyFilter
, bool bIncludedFiltered
, bool bAsLink
,
1409 bool bTranspose
, bool bMultiRangeSelection
,
1410 bool bSkipEmpty
, std::unique_ptr
<ScUndoCut
>& pUndoCut
,
1411 std::unique_ptr
<ScUndoPaste
>& pUndoPaste
, bool bCut
,
1412 ScClipParam::Direction eDirection
, CalcMode eCalcMode
,
1413 InsertDeleteFlags aFlags
)
1415 // turn on/off auto calc
1416 sc::AutoCalcSwitch
aACSwitch(*m_pDoc
, eCalcMode
== AutoCalc
);
1418 for (int i
= 0; i
< srcSheet
; ++i
)
1419 m_pDoc
->InsertTab(i
, "Empty Tab " + OUString::number(i
));
1421 m_pDoc
->InsertTab(srcSheet
, u
"SrcSheet"_ustr
);
1423 // We need a drawing layer in order to create caption objects.
1424 m_pDoc
->InitDrawLayer(m_xDocShell
.get());
1425 ScFieldEditEngine
& rEditEngine
= m_pDoc
->GetEditEngine();
1428 | B | C | D | E | F | G |
1430 3r | 1 B*| =B3+10 *| a | R1 *| =B3+B5+60 | =SUMIF(B3:B6;"<4") |
1431 4r | 2 B*| =B4+20 b | b *| R2 *| | *| <- filtered row
1432 5r | 3 B*| =E5+30 b*| c *| 5 *| B*| |
1433 6 | 4 | =B4+40 b*| d *| R4 *| =B3+B5+70 *| =C$3+$B$5+80 *|
1434 (7r | 6 | q | r bB*| s bB| t | u |) optional, for row range
1435 (8 | -1 | -2 | -3 | -4 | -5 | -6 |) optional, for row range
1436 (9r | -11 | -12 | -13 | -14 | -15 | -16 |) optional, for row range
1437 (10 | -21 | -22 | -23 | -24 | -25 | -26 |) optional, for row range
1439 \______________/ \________________________________________/
1440 col range 1 col range 2
1442 refs to cells (used for cut/paste tests)
1443 15 | =C5 | =$C$5 | =$C5 | =C$5| =SUM(C5:C5) | =SUM($C5:$C5) | =SUM($C5:$C5) | =SUM(C$5:C$5) | =SUM($B$3:$B$6) | =SUM($B$3:$B$10) |
1444 16 | =Range_C5 | =Range_aCa5 | =Range_aC5 | =Range_Ca5| =SUM(Range_C5_C5) | =SUM(Range_aCa5_aCa5) | =SUM(Range_aC5_aC5) | =SUM(Range_Ca5_Ca5) | =SUM(Range_aCa5_aCa8) | =SUM(Range_aCa5_aCa10) |
1446 * means note attached
1449 r means row selected for row range in multi range selection
1451 The following test scenarios can be created:
1455 * All cell types: numbers, strings, formulas, rich text, empty cell
1456 * Notes at different position
1457 * Formula references to rows before and after filtered row
1458 * Double reference (e.g. B3:B5)
1459 * Relative and absolute references
1460 * absolute references are not changed by transposing
1461 * Formatting patterns (e.g. cell backgrounds and borders)
1462 * Multi range selection with direction column and row
1467 // Add additional row for MultiRange test cases
1468 if (bMultiRangeSelection
)
1470 nSrcRows
= eDirection
== ScClipParam::Row
? nSrcRows
+ 2 : nSrcRows
;
1471 nSrcCols
= eDirection
== ScClipParam::Column
? nSrcCols
+ 1 : nSrcCols
;
1474 const SCCOL nStartCol
= 1;
1475 const SCROW nStartRow
= 2;
1478 m_pDoc
->SetValue(1, 2, srcSheet
, 1);
1479 m_pDoc
->SetValue(1, 3, srcSheet
, 2);
1480 m_pDoc
->SetValue(1, 4, srcSheet
, 3);
1481 m_pDoc
->SetValue(1, 5, srcSheet
, 4);
1483 m_pDoc
->SetString(2, 2, srcSheet
, u
"=B3+10"_ustr
);
1484 m_pDoc
->SetString(2, 3, srcSheet
, u
"=B4+20"_ustr
);
1485 m_pDoc
->SetString(2, 4, srcSheet
, u
"=E5+30"_ustr
);
1486 m_pDoc
->SetString(2, 5, srcSheet
, u
"=B4+40"_ustr
);
1488 m_pDoc
->SetString(3, 2, srcSheet
, u
"a"_ustr
);
1489 m_pDoc
->SetString(3, 3, srcSheet
, u
"b"_ustr
);
1490 m_pDoc
->SetString(3, 4, srcSheet
, u
"c"_ustr
);
1491 m_pDoc
->SetString(3, 5, srcSheet
, u
"d"_ustr
);
1493 rEditEngine
.SetTextCurrentDefaults(u
"R1"_ustr
);
1494 m_pDoc
->SetEditText(ScAddress(4, 2, srcSheet
), rEditEngine
.CreateTextObject());
1495 rEditEngine
.SetTextCurrentDefaults(u
"R2"_ustr
);
1496 m_pDoc
->SetEditText(ScAddress(4, 3, srcSheet
), rEditEngine
.CreateTextObject());
1497 m_pDoc
->SetValue(4, 4, srcSheet
, 5);
1498 rEditEngine
.SetTextCurrentDefaults(u
"R4"_ustr
);
1499 m_pDoc
->SetEditText(ScAddress(4, 5, srcSheet
), rEditEngine
.CreateTextObject());
1501 m_pDoc
->SetValue(5, 2, srcSheet
, 9);
1502 m_pDoc
->SetString(5, 2, srcSheet
, u
"=B3+B5+60"_ustr
);
1503 m_pDoc
->SetEmptyCell(ScAddress(5, 3, srcSheet
));
1504 m_pDoc
->SetEmptyCell(ScAddress(5, 4, srcSheet
));
1505 m_pDoc
->SetString(5, 5, srcSheet
, u
"=B3+B5+70"_ustr
);
1507 m_pDoc
->SetValue(6, 2, srcSheet
, 9);
1508 m_pDoc
->SetString(6, 2, srcSheet
, u
"=SUMIF(B3:B6;\"<4\")"_ustr
);
1509 m_pDoc
->SetEmptyCell(ScAddress(6, 3, srcSheet
));
1510 m_pDoc
->SetEmptyCell(ScAddress(6, 4, srcSheet
));
1511 m_pDoc
->SetString(6, 5, srcSheet
, u
"=C$3+$B$5+80"_ustr
);
1513 const SfxPoolItem
* pItem
= nullptr;
1515 // row 6, additional row for MultiRange test case, otherwise not selected
1516 m_pDoc
->SetValue(1, 6, srcSheet
, 6);
1517 m_pDoc
->SetString(2, 6, srcSheet
, u
"q"_ustr
);
1518 m_pDoc
->SetString(3, 6, srcSheet
, u
"r"_ustr
);
1519 m_pDoc
->SetString(4, 6, srcSheet
, u
"s"_ustr
);
1520 m_pDoc
->SetString(5, 6, srcSheet
, u
"t"_ustr
);
1521 m_pDoc
->SetString(6, 6, srcSheet
, u
"u"_ustr
);
1523 // row 7, not selected
1524 m_pDoc
->SetValue(1, 7, srcSheet
, -1);
1525 m_pDoc
->SetValue(2, 7, srcSheet
, -2);
1526 m_pDoc
->SetValue(3, 7, srcSheet
, -3);
1527 m_pDoc
->SetValue(4, 7, srcSheet
, -4);
1528 m_pDoc
->SetValue(5, 7, srcSheet
, -5);
1529 m_pDoc
->SetValue(6, 7, srcSheet
, -6);
1531 // row 8, additional row for MultiRange test case, otherwise not selected
1532 m_pDoc
->SetValue(1, 8, srcSheet
, -11);
1533 m_pDoc
->SetValue(2, 8, srcSheet
, -12);
1534 m_pDoc
->SetValue(3, 8, srcSheet
, -13);
1535 m_pDoc
->SetValue(4, 8, srcSheet
, -14);
1536 m_pDoc
->SetValue(5, 8, srcSheet
, -15);
1537 m_pDoc
->SetValue(6, 8, srcSheet
, -16);
1539 // row 9, additional row for MultiRange test case, otherwise not selected
1540 m_pDoc
->SetValue(1, 9, srcSheet
, -21);
1541 m_pDoc
->SetValue(2, 9, srcSheet
, -22);
1542 m_pDoc
->SetValue(3, 9, srcSheet
, -23);
1543 m_pDoc
->SetValue(4, 9, srcSheet
, -24);
1544 m_pDoc
->SetValue(5, 9, srcSheet
, -25);
1545 m_pDoc
->SetValue(6, 9, srcSheet
, -26);
1547 // Col H, not selected
1548 m_pDoc
->SetValue(7, 2, srcSheet
, 111);
1549 m_pDoc
->SetValue(7, 3, srcSheet
, 112);
1550 m_pDoc
->SetValue(7, 4, srcSheet
, 113);
1551 m_pDoc
->SetValue(7, 5, srcSheet
, 114);
1552 m_pDoc
->SetValue(7, 6, srcSheet
, 115);
1553 m_pDoc
->SetValue(7, 7, srcSheet
, 116);
1555 // Col I, additional col for MultiRange test case, otherwise not selected
1556 m_pDoc
->SetValue(8, 2, srcSheet
, 121);
1557 m_pDoc
->SetValue(8, 3, srcSheet
, 122);
1558 m_pDoc
->SetValue(8, 4, srcSheet
, 123);
1559 m_pDoc
->SetValue(8, 5, srcSheet
, 124);
1560 m_pDoc
->SetValue(8, 6, srcSheet
, 125);
1561 m_pDoc
->SetValue(8, 7, srcSheet
, 126);
1563 // Col J, not selected
1564 m_pDoc
->SetValue(9, 2, srcSheet
, 131);
1565 m_pDoc
->SetValue(9, 3, srcSheet
, 132);
1566 m_pDoc
->SetValue(9, 4, srcSheet
, 133);
1567 m_pDoc
->SetValue(9, 5, srcSheet
, 134);
1568 m_pDoc
->SetValue(9, 6, srcSheet
, 135);
1569 m_pDoc
->SetValue(9, 7, srcSheet
, 136);
1571 // row 16, refs to copied/cut range
1572 m_pDoc
->SetString(1, 16, srcSheet
, u
"=C5"_ustr
);
1573 m_pDoc
->SetString(2, 16, srcSheet
, u
"=$C$5"_ustr
);
1574 m_pDoc
->SetString(3, 16, srcSheet
, u
"=$C5"_ustr
);
1575 m_pDoc
->SetString(4, 16, srcSheet
, u
"=C$5"_ustr
);
1576 m_pDoc
->SetString(5, 16, srcSheet
, u
"=SUM(C5:C5)"_ustr
);
1577 m_pDoc
->SetString(6, 16, srcSheet
, u
"=SUM($C$5:$C$5)"_ustr
);
1578 m_pDoc
->SetString(7, 16, srcSheet
, u
"=SUM($C5:$C5)"_ustr
);
1579 m_pDoc
->SetString(8, 16, srcSheet
, u
"=SUM(C$5:C$5)"_ustr
);
1580 m_pDoc
->SetString(9, 16, srcSheet
, u
"=SUM($B$3:$B$6)"_ustr
);
1581 m_pDoc
->SetString(10, 16, srcSheet
, u
"=SUM($B$3:$B$10)"_ustr
);
1583 // Cell position is used for ranges relative to current position
1584 ScAddress
cellC6(2, 5, srcSheet
);
1585 ScAddress
cellA1(0, 0, srcSheet
);
1586 CPPUNIT_ASSERT(m_pDoc
->InsertNewRangeName(u
"Range_C5"_ustr
, cellC6
, u
"$SrcSheet.C5"_ustr
));
1587 CPPUNIT_ASSERT(m_pDoc
->InsertNewRangeName(u
"Range_aCa5"_ustr
, cellA1
, u
"$SrcSheet.$C$5"_ustr
));
1588 CPPUNIT_ASSERT(m_pDoc
->InsertNewRangeName(u
"Range_aC5"_ustr
, cellC6
, u
"$SrcSheet.$C5"_ustr
));
1589 CPPUNIT_ASSERT(m_pDoc
->InsertNewRangeName(u
"Range_Ca5"_ustr
, cellC6
, u
"$SrcSheet.C$5"_ustr
));
1591 m_pDoc
->InsertNewRangeName(u
"Range_C5_C5"_ustr
, cellC6
, u
"$SrcSheet.C5:C5"_ustr
));
1593 m_pDoc
->InsertNewRangeName(u
"Range_aCa5_aCa5"_ustr
, cellA1
, u
"$SrcSheet.$C$5:$C$5"_ustr
));
1595 m_pDoc
->InsertNewRangeName(u
"Range_aC5_aC5"_ustr
, cellC6
, u
"$SrcSheet.$C5:$C5"_ustr
));
1597 m_pDoc
->InsertNewRangeName(u
"Range_aC5_aC5"_ustr
, cellC6
, u
"$SrcSheet.$C5:$C5"_ustr
));
1599 m_pDoc
->InsertNewRangeName(u
"Range_Ca5_Ca5"_ustr
, cellC6
, u
"$SrcSheet.C$5:C$5"_ustr
));
1601 m_pDoc
->InsertNewRangeName(u
"Range_aCa5_aCa8"_ustr
, cellA1
, u
"$SrcSheet.$B$3:$B$6"_ustr
));
1603 m_pDoc
->InsertNewRangeName(u
"Range_aCa5_aCa10"_ustr
, cellA1
, u
"$SrcSheet.$B$3:$B$10"_ustr
));
1605 // row 17, refs to copied/cut range using range
1606 m_pDoc
->SetString(1, 17, srcSheet
, u
"=Range_C5"_ustr
);
1607 m_pDoc
->SetString(2, 17, srcSheet
, u
"=Range_aCa5"_ustr
);
1608 m_pDoc
->SetString(3, 17, srcSheet
, u
"=Range_aC5"_ustr
);
1609 m_pDoc
->SetString(4, 17, srcSheet
, u
"=Range_Ca5"_ustr
);
1610 m_pDoc
->SetString(5, 17, srcSheet
, u
"=SUM(Range_C5_C5)"_ustr
);
1611 m_pDoc
->SetString(6, 17, srcSheet
, u
"=SUM(Range_aCa5_aCa5)"_ustr
);
1612 m_pDoc
->SetString(7, 17, srcSheet
, u
"=SUM(Range_aC5_aC5)"_ustr
);
1613 m_pDoc
->SetString(8, 17, srcSheet
, u
"=SUM(Range_Ca5_Ca5)"_ustr
);
1614 m_pDoc
->SetString(9, 17, srcSheet
, u
"=SUM(Range_aCa5_aCa8)"_ustr
);
1615 m_pDoc
->SetString(10, 17, srcSheet
, u
"=SUM(Range_aCa5_aCa10)"_ustr
);
1618 ScPatternAttr
aCellBlueColor(m_pDoc
->getCellAttributeHelper());
1619 aCellBlueColor
.GetItemSet().Put(SvxBrushItem(COL_BLUE
, ATTR_BACKGROUND
));
1620 m_pDoc
->ApplyPatternAreaTab(1, 2, 1, 4, srcSheet
, aCellBlueColor
);
1622 // Check pattern precondition
1623 m_pDoc
->GetPattern(ScAddress(1, 2, srcSheet
))->GetItemSet().HasItem(ATTR_BACKGROUND
, &pItem
);
1624 CPPUNIT_ASSERT_MESSAGE("SrcSheet.B3 has a pattern", pItem
);
1625 CPPUNIT_ASSERT_EQUAL(COL_BLUE
, static_cast<const SvxBrushItem
*>(pItem
)->GetColor());
1626 m_pDoc
->GetPattern(ScAddress(1, 3, srcSheet
))->GetItemSet().HasItem(ATTR_BACKGROUND
, &pItem
);
1627 CPPUNIT_ASSERT_MESSAGE("SrcSheet.B4 has a pattern", pItem
);
1628 CPPUNIT_ASSERT_EQUAL(COL_BLUE
, static_cast<const SvxBrushItem
*>(pItem
)->GetColor());
1629 m_pDoc
->GetPattern(ScAddress(1, 5, srcSheet
))->GetItemSet().HasItem(ATTR_BACKGROUND
, &pItem
);
1630 CPPUNIT_ASSERT_MESSAGE("SrcSheet.B6 has no pattern", !pItem
);
1632 // row 2 on empty cell
1633 ScPatternAttr
aCellGreenColor(m_pDoc
->getCellAttributeHelper());
1634 aCellGreenColor
.GetItemSet().Put(SvxBrushItem(COL_GREEN
, ATTR_BACKGROUND
));
1635 m_pDoc
->ApplyPatternAreaTab(5, 4, 5, 4, srcSheet
, aCellGreenColor
);
1637 // row 4 for multi range row selection
1638 ScPatternAttr
aCellRedColor(m_pDoc
->getCellAttributeHelper());
1639 aCellRedColor
.GetItemSet().Put(SvxBrushItem(COL_RED
, ATTR_BACKGROUND
));
1640 m_pDoc
->ApplyPatternAreaTab(3, 6, 4, 6, srcSheet
, aCellRedColor
);
1643 ::editeng::SvxBorderLine
aLine(nullptr, 50, SvxBorderLineStyle::SOLID
);
1644 SvxBoxItem
aBorderItem(ATTR_BORDER
);
1645 aBorderItem
.SetLine(&aLine
, SvxBoxItemLine::LEFT
);
1646 aBorderItem
.SetLine(&aLine
, SvxBoxItemLine::RIGHT
);
1647 m_pDoc
->ApplyAttr(2, 3, srcSheet
, aBorderItem
);
1648 m_pDoc
->ApplyAttr(2, 4, srcSheet
, aBorderItem
);
1649 m_pDoc
->ApplyAttr(2, 5, srcSheet
, aBorderItem
);
1650 // Check border precondition
1651 pItem
= m_pDoc
->GetAttr(ScAddress(2, 2, srcSheet
), ATTR_BORDER
);
1652 CPPUNIT_ASSERT_MESSAGE("SrcSheet.B1 has a border", pItem
);
1653 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetLeft());
1654 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetRight());
1655 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetTop());
1656 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetBottom());
1657 pItem
= m_pDoc
->GetAttr(ScAddress(2, 3, srcSheet
), ATTR_BORDER
);
1658 CPPUNIT_ASSERT_MESSAGE("SrcSheet.B2 has a border", pItem
);
1659 CPPUNIT_ASSERT(static_cast<const SvxBoxItem
*>(pItem
)->GetLeft());
1660 CPPUNIT_ASSERT(static_cast<const SvxBoxItem
*>(pItem
)->GetRight());
1661 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetTop());
1662 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetBottom());
1663 // Check border precondition 2
1664 m_pDoc
->GetPattern(ScAddress(2, 3, srcSheet
))->GetItemSet().HasItem(ATTR_BORDER
, &pItem
);
1665 CPPUNIT_ASSERT_MESSAGE("SrcSheet.B2 has a border", pItem
);
1666 CPPUNIT_ASSERT(static_cast<const SvxBoxItem
*>(pItem
)->GetLeft());
1667 CPPUNIT_ASSERT(static_cast<const SvxBoxItem
*>(pItem
)->GetRight());
1668 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetTop());
1669 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetBottom());
1670 // row 4 for multi range row selection
1671 ::editeng::SvxBorderLine
aDoubleLine(nullptr, 50, SvxBorderLineStyle::DOUBLE
);
1672 SvxBoxItem
aDoubleBorderItem(ATTR_BORDER
);
1673 aDoubleBorderItem
.SetLine(&aDoubleLine
, SvxBoxItemLine::TOP
);
1674 aDoubleBorderItem
.SetLine(&aDoubleLine
, SvxBoxItemLine::BOTTOM
);
1675 m_pDoc
->ApplyAttr(3, 6, srcSheet
, aDoubleBorderItem
);
1676 m_pDoc
->ApplyAttr(4, 6, srcSheet
, aDoubleBorderItem
);
1678 // add notes to B3:F4
1681 setNote(1, 2, srcSheet
, u
"Note A1"_ustr
);
1682 setNote(2, 2, srcSheet
, u
"Note B1"_ustr
);
1684 setNote(4, 2, srcSheet
, u
"Note D1"_ustr
);
1689 setNote(1, 3, srcSheet
, u
"Note A2"_ustr
);
1691 setNote(3, 3, srcSheet
, u
"Note C2"_ustr
);
1692 setNote(4, 3, srcSheet
, u
"Note D2"_ustr
);
1693 setNote(5, 4, srcSheet
, u
"Note E2"_ustr
);
1694 setNote(6, 3, srcSheet
, u
"Note F2"_ustr
);
1697 setNote(1, 4, srcSheet
, u
"Note A3"_ustr
);
1698 setNote(2, 4, srcSheet
, u
"Note B3"_ustr
);
1699 setNote(3, 4, srcSheet
, u
"Note C3"_ustr
);
1700 setNote(4, 4, srcSheet
, u
"Note D3"_ustr
);
1706 setNote(2, 5, srcSheet
, u
"Note B4"_ustr
);
1707 setNote(3, 5, srcSheet
, u
"Note C4"_ustr
);
1708 setNote(4, 5, srcSheet
, u
"Note D4"_ustr
);
1709 setNote(5, 5, srcSheet
, u
"Note E4"_ustr
);
1710 setNote(6, 5, srcSheet
, u
"Note F4"_ustr
);
1712 // row 6 for multi range row selection
1713 setNote(3, 6, srcSheet
, u
"Note C5"_ustr
);
1716 if (bMultiRangeSelection
&& bTranspose
&& eDirection
== ScClipParam::Row
1717 && eCalcMode
== RecalcAtEnd
)
1718 m_pDoc
->CalcFormulaTree();
1719 else if (bMultiRangeSelection
&& bTranspose
&& eDirection
== ScClipParam::Row
1720 && eCalcMode
== HardRecalcAtEnd
)
1727 = new ScDBData(u
"TRANSPOSE_TEST_DATA"_ustr
, srcSheet
, nStartCol
, nStartRow
,
1728 nStartCol
+ nSrcCols
- 1, nStartRow
+ nSrcRows
- 1);
1729 m_pDoc
->SetAnonymousDBData(srcSheet
, std::unique_ptr
<ScDBData
>(pDBData
));
1731 pDBData
->SetAutoFilter(true);
1733 pDBData
->GetArea(aRange
);
1734 m_pDoc
->ApplyFlagsTab(aRange
.aStart
.Col(), aRange
.aStart
.Row(), aRange
.aEnd
.Col(),
1735 aRange
.aStart
.Row(), aRange
.aStart
.Tab(), ScMF::Auto
);
1737 //create the query param
1738 ScQueryParam aParam
;
1739 pDBData
->GetQueryParam(aParam
);
1740 ScQueryEntry
& rEntry
= aParam
.GetEntry(0);
1741 rEntry
.bDoQuery
= true;
1742 rEntry
.nField
= nStartCol
;
1743 rEntry
.eOp
= SC_NOT_EQUAL
;
1744 rEntry
.GetQueryItem().mfVal
= 2; // value of row B4 -> filtering row 3
1745 // add queryParam to database range.
1746 pDBData
->SetQueryParam(aParam
);
1748 // perform the query.
1749 m_pDoc
->Query(srcSheet
, aParam
, true);
1751 // Check precondition for test: row 3 is hidden/filtered
1753 SCROW nFilteredRow1
, nFilteredRow2
;
1754 bool bHidden
= m_pDoc
->RowHidden(SCROW(3), srcSheet
, &nRow1
, &nRow2
);
1755 CPPUNIT_ASSERT_MESSAGE("row 3 should be hidden", bHidden
);
1756 CPPUNIT_ASSERT_EQUAL_MESSAGE("row 3 should be hidden", SCROW(3), nRow1
);
1757 CPPUNIT_ASSERT_EQUAL_MESSAGE("row 3 should be hidden", SCROW(3), nRow2
);
1758 bool bFiltered
= m_pDoc
->RowFiltered(SCROW(3), srcSheet
, &nFilteredRow1
, &nFilteredRow2
);
1759 CPPUNIT_ASSERT_MESSAGE("row 3 should be filtered", bFiltered
);
1760 CPPUNIT_ASSERT_EQUAL_MESSAGE("row 3 should be filtered", SCROW(3), nFilteredRow1
);
1761 CPPUNIT_ASSERT_EQUAL_MESSAGE("row 3 should be filtered", SCROW(3), nFilteredRow2
);
1764 // create destination sheet
1765 // const SCTAB destSheet = 1;
1766 for (int i
= srcSheet
+ 1; i
< destSheet
; ++i
)
1767 m_pDoc
->InsertTab(i
, "Empty Tab " + OUString::number(i
));
1769 if (srcSheet
!= destSheet
)
1770 m_pDoc
->InsertTab(destSheet
, u
"DestSheet"_ustr
);
1772 m_pDoc
->SetString(3, 101, srcSheet
, u
"=DestSheet.D1"_ustr
);
1773 m_pDoc
->SetString(3, 102, srcSheet
, u
"=DestSheet.D2"_ustr
);
1774 m_pDoc
->SetString(3, 103, srcSheet
, u
"=DestSheet.D3"_ustr
);
1775 m_pDoc
->SetString(3, 104, srcSheet
, u
"=DestSheet.D4"_ustr
);
1776 m_pDoc
->SetString(3, 105, srcSheet
, u
"=DestSheet.D5"_ustr
);
1777 m_pDoc
->SetString(3, 106, srcSheet
, u
"=DestSheet.D6"_ustr
);
1778 m_pDoc
->SetString(3, 107, srcSheet
, u
"=DestSheet.D7"_ustr
);
1779 m_pDoc
->SetString(4, 101, srcSheet
, u
"=DestSheet.E1"_ustr
);
1780 m_pDoc
->SetString(4, 102, srcSheet
, u
"=DestSheet.E2"_ustr
);
1781 m_pDoc
->SetString(4, 103, srcSheet
, u
"=DestSheet.E3"_ustr
);
1782 m_pDoc
->SetString(4, 104, srcSheet
, u
"=DestSheet.E4"_ustr
);
1783 m_pDoc
->SetString(4, 105, srcSheet
, u
"=DestSheet.E5"_ustr
);
1784 m_pDoc
->SetString(4, 106, srcSheet
, u
"=DestSheet.E6"_ustr
);
1785 m_pDoc
->SetString(4, 107, srcSheet
, u
"=DestSheet.E7"_ustr
);
1786 m_pDoc
->SetString(5, 101, srcSheet
, u
"=DestSheet.F1"_ustr
);
1787 m_pDoc
->SetString(5, 102, srcSheet
, u
"=DestSheet.F2"_ustr
);
1788 m_pDoc
->SetString(5, 103, srcSheet
, u
"=DestSheet.F3"_ustr
);
1789 m_pDoc
->SetString(5, 104, srcSheet
, u
"=DestSheet.F4"_ustr
);
1790 m_pDoc
->SetString(5, 105, srcSheet
, u
"=DestSheet.F5"_ustr
);
1791 m_pDoc
->SetString(5, 106, srcSheet
, u
"=DestSheet.F6"_ustr
);
1792 m_pDoc
->SetString(5, 107, srcSheet
, u
"=DestSheet.F7"_ustr
);
1793 m_pDoc
->SetString(6, 101, srcSheet
, u
"=DestSheet.G1"_ustr
);
1794 m_pDoc
->SetString(6, 102, srcSheet
, u
"=DestSheet.G2"_ustr
);
1795 m_pDoc
->SetString(6, 103, srcSheet
, u
"=DestSheet.G3"_ustr
);
1796 m_pDoc
->SetString(6, 104, srcSheet
, u
"=DestSheet.G4"_ustr
);
1797 m_pDoc
->SetString(6, 105, srcSheet
, u
"=DestSheet.G5"_ustr
);
1798 m_pDoc
->SetString(6, 106, srcSheet
, u
"=DestSheet.G6"_ustr
);
1799 m_pDoc
->SetString(6, 107, srcSheet
, u
"=DestSheet.G7"_ustr
);
1800 m_pDoc
->SetString(7, 101, srcSheet
, u
"=DestSheet.H1"_ustr
);
1801 m_pDoc
->SetString(7, 102, srcSheet
, u
"=DestSheet.H2"_ustr
);
1802 m_pDoc
->SetString(7, 103, srcSheet
, u
"=DestSheet.H3"_ustr
);
1803 m_pDoc
->SetString(7, 104, srcSheet
, u
"=DestSheet.H4"_ustr
);
1804 m_pDoc
->SetString(7, 105, srcSheet
, u
"=DestSheet.H5"_ustr
);
1805 m_pDoc
->SetString(7, 106, srcSheet
, u
"=DestSheet.H6"_ustr
);
1806 m_pDoc
->SetString(7, 107, srcSheet
, u
"=DestSheet.H7"_ustr
);
1807 m_pDoc
->SetString(8, 101, srcSheet
, u
"=DestSheet.I1"_ustr
);
1808 m_pDoc
->SetString(8, 102, srcSheet
, u
"=DestSheet.I2"_ustr
);
1809 m_pDoc
->SetString(8, 103, srcSheet
, u
"=DestSheet.I3"_ustr
);
1810 m_pDoc
->SetString(8, 104, srcSheet
, u
"=DestSheet.I4"_ustr
);
1811 m_pDoc
->SetString(8, 105, srcSheet
, u
"=DestSheet.I5"_ustr
);
1812 m_pDoc
->SetString(8, 106, srcSheet
, u
"=DestSheet.I6"_ustr
);
1813 m_pDoc
->SetString(8, 107, srcSheet
, u
"=DestSheet.I7"_ustr
);
1814 m_pDoc
->SetString(9, 101, srcSheet
, u
"=DestSheet.J1"_ustr
);
1815 m_pDoc
->SetString(9, 102, srcSheet
, u
"=DestSheet.J2"_ustr
);
1816 m_pDoc
->SetString(9, 103, srcSheet
, u
"=DestSheet.J3"_ustr
);
1817 m_pDoc
->SetString(9, 104, srcSheet
, u
"=DestSheet.J4"_ustr
);
1818 m_pDoc
->SetString(9, 105, srcSheet
, u
"=DestSheet.J5"_ustr
);
1819 m_pDoc
->SetString(9, 106, srcSheet
, u
"=DestSheet.J6"_ustr
);
1820 m_pDoc
->SetString(9, 107, srcSheet
, u
"=DestSheet.J7"_ustr
);
1822 // Check precondition
1823 checkCopyPasteSpecialInitial(srcSheet
);
1825 // set cells to 1000 to check empty cell behaviour and to detect destination range problems
1826 for (int i
= 0; i
< 10; ++i
)
1827 for (int j
= 0; j
< 10; ++j
)
1828 m_pDoc
->SetValue(i
, j
, destSheet
, 1000);
1830 // transpose clipboard, paste on DestSheet
1831 ScDocument
aClipDoc(SCDOCMODE_CLIP
);
1832 ScMarkData
aDestMark(m_pDoc
->GetSheetLimits());
1835 ScDocumentUniquePtr pPasteUndoDoc
;
1836 std::unique_ptr
<ScDocument
> pPasteRefUndoDoc
;
1837 std::unique_ptr
<ScRefUndoData
> pUndoData
;
1839 if (!bMultiRangeSelection
)
1841 ScRange
aSrcRange(nStartCol
, nStartRow
, srcSheet
, nStartCol
+ nSrcCols
- 1,
1842 nStartRow
+ nSrcRows
- 1, srcSheet
);
1843 printRange(m_pDoc
, aSrcRange
, "Src range");
1845 copyToClip(m_pDoc
, aSrcRange
, &aClipDoc
);
1848 pUndoCut
.reset(cutToClip(*m_xDocShell
, aSrcRange
, &aClipDoc
, true));
1851 printRange(&aClipDoc
,
1852 ScRange(nStartCol
, nStartRow
, srcSheet
, nStartCol
+ nSrcCols
,
1853 nStartRow
+ nSrcRows
, srcSheet
),
1854 "Base doc (&aClipDoc)");
1856 // ScDocument::TransposeClip() and ScDocument::CopyFromClip() calls
1857 // analog to ScViewFunc::PasteFromClip()
1860 ScDocument
* pOrigClipDoc
= &aClipDoc
;
1861 ScDocumentUniquePtr
pTransClip(new ScDocument(SCDOCMODE_CLIP
));
1862 aClipDoc
.TransposeClip(pTransClip
.get(), aFlags
, bAsLink
, bIncludedFiltered
);
1863 aDestRange
= ScRange(3, 1, destSheet
, 3 + nSrcRows
- 1, 1 + nSrcCols
- 1,
1864 destSheet
); //target: D2:F6
1865 aDestMark
.SetMarkArea(aDestRange
);
1866 printRange(pTransClip
.get(), ScRange(0, 0, srcSheet
, nSrcCols
, nSrcRows
, srcSheet
),
1867 "Transposed clipdoc (pTransClip.get())");
1870 prepareUndoBeforePaste(bCut
, pPasteUndoDoc
, pPasteRefUndoDoc
, aDestMark
, aDestRange
,
1873 m_pDoc
->CopyFromClip(aDestRange
, aDestMark
, aFlags
, pPasteRefUndoDoc
.get(),
1874 pTransClip
.get(), true, bAsLink
, bIncludedFiltered
, bSkipEmpty
);
1875 printRange(m_pDoc
, aDestRange
, "Transposed dest sheet");
1878 m_pDoc
->UpdateTranspose(aDestRange
.aStart
, pOrigClipDoc
, aDestMark
,
1879 pPasteRefUndoDoc
.get());
1880 printRange(m_pDoc
, aDestRange
, "Transposed dest sheet after UpdateTranspose()");
1886 aDestRange
= ScRange(3, 1, destSheet
, 3 + nSrcCols
- 1, 1 + nSrcRows
- 1,
1887 destSheet
); //target: D2:I5
1888 aDestMark
.SetMarkArea(aDestRange
);
1890 prepareUndoBeforePaste(bCut
, pPasteUndoDoc
, pPasteRefUndoDoc
, aDestMark
, aDestRange
,
1893 m_pDoc
->CopyFromClip(aDestRange
, aDestMark
, aFlags
, pPasteRefUndoDoc
.get(), &aClipDoc
,
1894 true, bAsLink
, bIncludedFiltered
, bSkipEmpty
);
1895 printValuesAndFormulasInRange(m_pDoc
, aDestRange
, "Dest sheet"_ostr
);
1899 prepareUndoAfterPaste(pPasteUndoDoc
, pPasteRefUndoDoc
, aDestMark
, aDestRange
, pUndoData
,
1900 pUndoPaste
, bTranspose
, bAsLink
, bSkipEmpty
);
1902 else // multi range selection
1904 ScMarkData
aSrcMark(m_pDoc
->GetSheetLimits());
1905 aSrcMark
.SelectOneTable(0);
1906 ScClipParam aClipParam
;
1907 aClipParam
.meDirection
= eDirection
;
1908 if (eDirection
== ScClipParam::Column
)
1910 aClipParam
.maRanges
.push_back(ScRange(1, 2, srcSheet
, 2, 5, srcSheet
)); // B3:C6
1911 aClipParam
.maRanges
.push_back(ScRange(4, 2, srcSheet
, 6, 5, srcSheet
)); // E3:G6
1912 aClipParam
.maRanges
.push_back(ScRange(8, 2, srcSheet
, 8, 5, srcSheet
)); // I3:I6
1914 else if (eDirection
== ScClipParam::Row
)
1916 aClipParam
.maRanges
.push_back(ScRange(1, 2, srcSheet
, 6, 4, srcSheet
)); // B3:G5
1917 aClipParam
.maRanges
.push_back(ScRange(1, 6, srcSheet
, 6, 6, srcSheet
)); // B7:G7
1918 aClipParam
.maRanges
.push_back(ScRange(1, 8, srcSheet
, 6, 8, srcSheet
)); // A9:G9
1920 CPPUNIT_ASSERT(aClipParam
.isMultiRange());
1921 m_pDoc
->CopyToClip(aClipParam
, &aClipDoc
, &aSrcMark
, false, false);
1923 // ScDocument::TransposeClip() and ScDocument::CopyMultiRangeFromClip() calls
1924 // analog to ScViewFunc::PasteFromClipToMultiRanges()
1927 printRange(m_pDoc
, aClipParam
.getWholeRange(), "Src range");
1928 ScDocumentUniquePtr
pTransClip(new ScDocument(SCDOCMODE_CLIP
));
1929 aClipDoc
.TransposeClip(pTransClip
.get(), aFlags
, bAsLink
, bIncludedFiltered
);
1930 aDestRange
= ScRange(3, 1, destSheet
, 3 + nSrcRows
- 1, 1 + nSrcCols
- 1 - 1,
1931 destSheet
); //target col: D2:G6, target row: D2:H6
1932 aDestMark
.SetMarkArea(aDestRange
);
1933 printRange(&aClipDoc
, ScRange(0, 0, srcSheet
, nSrcCols
, nSrcRows
, srcSheet
),
1934 "Base doc (&aClipDoc)");
1935 printRange(pTransClip
.get(), ScRange(0, 0, srcSheet
, nSrcCols
, nSrcRows
, srcSheet
),
1936 "Transposed clipdoc (pTransClip.get())");
1937 m_pDoc
->CopyMultiRangeFromClip(ScAddress(3, 1, destSheet
), aDestMark
, aFlags
,
1938 pTransClip
.get(), true, bAsLink
&& !bTranspose
,
1939 bIncludedFiltered
, bSkipEmpty
);
1941 printRange(m_pDoc
, aDestRange
, "Transposed dest sheet");
1945 aDestRange
= ScRange(3, 1, destSheet
, 3 + nSrcCols
- 1 - 1, 1 + nSrcRows
- 1,
1946 destSheet
); //target col: D2:I5, target row: D2:I6
1947 aDestMark
.SetMarkArea(aDestRange
);
1948 m_pDoc
->CopyMultiRangeFromClip(ScAddress(3, 1, destSheet
), aDestMark
, aFlags
, &aClipDoc
,
1949 true, bAsLink
&& !bTranspose
, bIncludedFiltered
,
1954 if (eCalcMode
== RecalcAtEnd
)
1955 m_pDoc
->CalcFormulaTree();
1956 else if (eCalcMode
== HardRecalcAtEnd
)
1960 CPPUNIT_TEST_FIXTURE(TestCopyPaste
, testCopyPasteSpecial
)
1962 executeCopyPasteSpecial(false, false, false, false, false, false);
1963 checkCopyPasteSpecial(false);
1966 CPPUNIT_TEST_FIXTURE(TestCopyPaste
, testCopyPasteSpecialFiltered
)
1968 executeCopyPasteSpecial(true, false, false, false, false, false);
1969 checkCopyPasteSpecialFiltered(false);
1972 CPPUNIT_TEST_FIXTURE(TestCopyPaste
, testCopyPasteSpecialIncludeFiltered
)
1974 // For bIncludeFiltered=true, the non-filtered outcome is expected
1975 executeCopyPasteSpecial(false, true, false, false, false, false);
1976 checkCopyPasteSpecial(false);
1979 CPPUNIT_TEST_FIXTURE(TestCopyPaste
, testCopyPasteSpecialFilteredIncludeFiltered
)
1981 // For bIncludeFiltered=true, the non-filtered outcome is expected
1982 executeCopyPasteSpecial(true, true, false, false, false, false);
1983 checkCopyPasteSpecial(false);
1986 // similar to TestCopyPaste::testCopyPasteTranspose(), but this test is more complex
1987 CPPUNIT_TEST_FIXTURE(TestCopyPaste
, testCopyPasteSpecialTranspose
)
1989 executeCopyPasteSpecial(false, false, false, true, false, false);
1990 checkCopyPasteSpecialTranspose(false);
1994 CPPUNIT_TEST_FIXTURE(TestCopyPaste
, testCopyPasteSpecialFilteredTranspose
)
1996 executeCopyPasteSpecial(true, false, false, true, false, false);
1997 checkCopyPasteSpecialFilteredTranspose(false);
2001 CPPUNIT_TEST_FIXTURE(TestCopyPaste
, testCopyPasteSpecialTransposeIncludeFiltered
)
2003 // For bIncludeFiltered=true, the non-filtered outcome is expected
2004 executeCopyPasteSpecial(true, true, false, true, false, false);
2005 checkCopyPasteSpecialTranspose(false);
2008 CPPUNIT_TEST_FIXTURE(TestCopyPaste
, testCopyPasteSpecialMultiRangeCol
)
2010 executeCopyPasteSpecial(false, false, false, false, true, false, false, ScClipParam::Column
);
2011 checkCopyPasteSpecialMultiRangeCol(false);
2014 CPPUNIT_TEST_FIXTURE(TestCopyPaste
, testCopyPasteSpecialMultiRangeColIncludeFiltered
)
2016 // For bIncludeFiltered=true, the non-filtered outcome is expected
2017 executeCopyPasteSpecial(false, true, false, false, true, false, false, ScClipParam::Column
);
2018 checkCopyPasteSpecialMultiRangeCol(false);
2022 CPPUNIT_TEST_FIXTURE(TestCopyPaste
, testCopyPasteSpecialMultiRangeColFiltered
)
2024 executeCopyPasteSpecial(true, false, false, false, true, false, false, ScClipParam::Column
);
2025 checkCopyPasteSpecialMultiRangeColFiltered(false);
2029 CPPUNIT_TEST_FIXTURE(TestCopyPaste
, testCopyPasteSpecialMultiRangeColFilteredIncludeFiltered
)
2031 // For bIncludeFiltered=true, the non-filtered outcome is expected
2032 executeCopyPasteSpecial(true, true, false, false, true, false, false, ScClipParam::Column
);
2033 checkCopyPasteSpecialMultiRangeCol(false);
2036 CPPUNIT_TEST_FIXTURE(TestCopyPaste
, testCopyPasteSpecialMultiRangeColTranspose
)
2038 executeCopyPasteSpecial(false, false, false, true, true, false, false, ScClipParam::Column
);
2039 checkCopyPasteSpecialMultiRangeColTranspose(false);
2042 // tdf#45958, tdf#107348
2043 CPPUNIT_TEST_FIXTURE(TestCopyPaste
, testCopyPasteSpecialMultiRangeColFilteredTranspose
)
2045 executeCopyPasteSpecial(true, false, false, true, true, false, false, ScClipParam::Column
);
2046 checkCopyPasteSpecialMultiRangeColFilteredTranspose(false);
2049 // tdf#45958, tdf#107348
2050 CPPUNIT_TEST_FIXTURE(TestCopyPaste
,
2051 testCopyPasteSpecialMultiRangeColFilteredIncludeFilteredTranspose
)
2053 // For bIncludeFiltered=true, the non-filtered outcome is expected
2054 executeCopyPasteSpecial(true, true, false, true, true, false, false, ScClipParam::Column
);
2055 checkCopyPasteSpecialMultiRangeColTranspose(false);
2058 CPPUNIT_TEST_FIXTURE(TestCopyPaste
, testCopyPasteSpecialMultiRangeRow
)
2060 executeCopyPasteSpecial(false, false, false, false, true, false, false, ScClipParam::Row
);
2061 checkCopyPasteSpecialMultiRangeRow(false);
2064 CPPUNIT_TEST_FIXTURE(TestCopyPaste
, testCopyPasteSpecialMultiRangeRowIncludeFiltered
)
2066 // For bIncludeFiltered=true, the non-filtered outcome is expected
2067 executeCopyPasteSpecial(false, true, false, false, true, false, false, ScClipParam::Row
);
2068 checkCopyPasteSpecialMultiRangeRow(false);
2072 CPPUNIT_TEST_FIXTURE(TestCopyPaste
, testCopyPasteSpecialMultiRangeRowFiltered
)
2074 executeCopyPasteSpecial(true, false, false, false, true, false, false, ScClipParam::Row
);
2075 checkCopyPasteSpecialMultiRangeRowFiltered(false);
2079 CPPUNIT_TEST_FIXTURE(TestCopyPaste
, testCopyPasteSpecialMultiRangeRowFilteredIncludeFiltered
)
2081 // For bIncludeFiltered=true, the non-filtered outcome is expected
2082 executeCopyPasteSpecial(true, true, false, false, true, false, false, ScClipParam::Row
);
2083 checkCopyPasteSpecialMultiRangeRow(false);
2086 CPPUNIT_TEST_FIXTURE(TestCopyPaste
, testCopyPasteSpecialMultiRangeRowTranspose
)
2088 executeCopyPasteSpecial(false, false, false, true, true, false, false, ScClipParam::Row
,
2090 checkCopyPasteSpecialMultiRangeRowTranspose(false);
2093 // tdf#45958, tdf#107348
2094 CPPUNIT_TEST_FIXTURE(TestCopyPaste
, testCopyPasteSpecialMultiRangeRowFilteredTranspose
)
2096 executeCopyPasteSpecial(true, false, false, true, true, false, false, ScClipParam::Row
,
2098 checkCopyPasteSpecialMultiRangeRowFilteredTranspose(false);
2101 // tdf#45958, tdf#107348
2102 CPPUNIT_TEST_FIXTURE(TestCopyPaste
,
2103 testCopyPasteSpecialMultiRangeRowFilteredIncludeFilteredTranspose
)
2105 // For bIncludeFiltered=true, the non-filtered outcome is expected
2106 executeCopyPasteSpecial(true, true, false, true, true, false, false, ScClipParam::Row
,
2108 checkCopyPasteSpecialMultiRangeRowTranspose(false);
2111 CPPUNIT_TEST_FIXTURE(TestCopyPaste
, testCopyPasteSpecialSkipEmpty
)
2113 executeCopyPasteSpecial(false, false, false, false, false, true);
2114 checkCopyPasteSpecial(true);
2117 CPPUNIT_TEST_FIXTURE(TestCopyPaste
, testCopyPasteSpecialSkipEmptyFiltered
)
2119 executeCopyPasteSpecial(true, false, false, false, false, true);
2120 checkCopyPasteSpecialFiltered(true);
2123 CPPUNIT_TEST_FIXTURE(TestCopyPaste
, testCopyPasteSpecialSkipEmptyIncludeFiltered
)
2125 // For bIncludeFiltered=true, the non-filtered outcome is expected
2126 executeCopyPasteSpecial(false, true, false, false, false, true);
2127 checkCopyPasteSpecial(true);
2130 CPPUNIT_TEST_FIXTURE(TestCopyPaste
, testCopyPasteSpecialSkipEmptyFilteredIncludeFiltered
)
2132 // For bIncludeFiltered=true, the non-filtered outcome is expected
2133 executeCopyPasteSpecial(true, true, false, false, false, true);
2134 checkCopyPasteSpecial(true);
2137 // similar to TestCopyPaste::testCopyPasteTranspose(), but this test is more complex
2138 CPPUNIT_TEST_FIXTURE(TestCopyPaste
, testCopyPasteSpecialSkipEmptyTranspose
)
2140 executeCopyPasteSpecial(false, false, false, true, false, true);
2141 checkCopyPasteSpecialTranspose(true);
2145 CPPUNIT_TEST_FIXTURE(TestCopyPaste
, testCopyPasteSpecialSkipEmptyFilteredTranspose
)
2147 executeCopyPasteSpecial(true, false, false, true, false, true);
2148 checkCopyPasteSpecialFilteredTranspose(true);
2152 CPPUNIT_TEST_FIXTURE(TestCopyPaste
, testCopyPasteSpecialSkipEmptyTransposeIncludeFiltered
)
2154 // For bIncludeFiltered=true, the non-filtered outcome is expected
2155 executeCopyPasteSpecial(true, true, false, true, false, true);
2156 checkCopyPasteSpecialTranspose(true);
2159 CPPUNIT_TEST_FIXTURE(TestCopyPaste
, testCopyPasteSpecialSkipEmptyMultiRangeCol
)
2161 executeCopyPasteSpecial(false, false, false, false, true, true, false, ScClipParam::Column
);
2162 checkCopyPasteSpecialMultiRangeCol(true);
2165 CPPUNIT_TEST_FIXTURE(TestCopyPaste
, testCopyPasteSpecialSkipEmptyMultiRangeColIncludeFiltered
)
2167 // For bIncludeFiltered=true, the non-filtered outcome is expected
2168 executeCopyPasteSpecial(false, true, false, false, true, true, false, ScClipParam::Column
);
2169 checkCopyPasteSpecialMultiRangeCol(true);
2173 CPPUNIT_TEST_FIXTURE(TestCopyPaste
, testCopyPasteSpecialSkipEmptyMultiRangeColFiltered
)
2175 executeCopyPasteSpecial(true, false, false, false, true, true, false, ScClipParam::Column
);
2176 checkCopyPasteSpecialMultiRangeColFiltered(true);
2180 CPPUNIT_TEST_FIXTURE(TestCopyPaste
,
2181 testCopyPasteSpecialSkipEmptyMultiRangeColFilteredIncludeFiltered
)
2183 // For bIncludeFiltered=true, the non-filtered outcome is expected
2184 executeCopyPasteSpecial(true, true, false, false, true, true, false, ScClipParam::Column
);
2185 checkCopyPasteSpecialMultiRangeCol(true);
2188 CPPUNIT_TEST_FIXTURE(TestCopyPaste
, testCopyPasteSpecialSkipEmptyMultiRangeColTranspose
)
2190 executeCopyPasteSpecial(false, false, false, true, true, true, false, ScClipParam::Column
);
2191 checkCopyPasteSpecialMultiRangeColTranspose(true);
2194 // tdf#45958, tdf#107348
2195 CPPUNIT_TEST_FIXTURE(TestCopyPaste
, testCopyPasteSpecialSkipEmptyMultiRangeColFilteredTranspose
)
2197 // For bIncludeFiltered=true, the non-filtered outcome is expected
2198 executeCopyPasteSpecial(true, false, false, true, true, true, false, ScClipParam::Column
);
2199 checkCopyPasteSpecialMultiRangeColFilteredTranspose(true);
2202 // tdf#45958, tdf#107348
2203 CPPUNIT_TEST_FIXTURE(TestCopyPaste
,
2204 testCopyPasteSpecialSkipEmptyMultiRangeColFilteredIncludeFilteredTranspose
)
2206 // For bIncludeFiltered=true, the non-filtered outcome is expected
2207 executeCopyPasteSpecial(true, true, false, true, true, true, false, ScClipParam::Column
);
2208 checkCopyPasteSpecialMultiRangeColTranspose(true);
2211 CPPUNIT_TEST_FIXTURE(TestCopyPaste
, testCopyPasteSpecialSkipEmptyMultiRangeRow
)
2213 executeCopyPasteSpecial(false, false, false, false, true, true, false, ScClipParam::Row
);
2214 checkCopyPasteSpecialMultiRangeRow(true);
2217 CPPUNIT_TEST_FIXTURE(TestCopyPaste
, testCopyPasteSpecialSkipEmptyMultiRangeRowIncludeFiltered
)
2219 // For bIncludeFiltered=true, the non-filtered outcome is expected
2220 executeCopyPasteSpecial(false, true, false, false, true, true, false, ScClipParam::Row
);
2221 checkCopyPasteSpecialMultiRangeRow(true);
2225 CPPUNIT_TEST_FIXTURE(TestCopyPaste
, testCopyPasteSpecialSkipEmptyMultiRangeRowFiltered
)
2227 executeCopyPasteSpecial(true, false, false, false, true, true, false, ScClipParam::Row
);
2228 checkCopyPasteSpecialMultiRangeRowFiltered(true);
2232 CPPUNIT_TEST_FIXTURE(TestCopyPaste
,
2233 testCopyPasteSpecialSkipEmptyMultiRangeRowFilteredIncludeFiltered
)
2235 // For bIncludeFiltered=true, the non-filtered outcome is expected
2236 executeCopyPasteSpecial(true, true, false, false, true, true, false, ScClipParam::Row
);
2237 checkCopyPasteSpecialMultiRangeRow(true);
2240 CPPUNIT_TEST_FIXTURE(TestCopyPaste
, testCopyPasteSpecialSkipEmptyMultiRangeRowTranspose
)
2242 executeCopyPasteSpecial(false, false, false, true, true, true, false, ScClipParam::Row
,
2244 checkCopyPasteSpecialMultiRangeRowTranspose(true);
2247 // tdf#45958, tdf#107348
2248 CPPUNIT_TEST_FIXTURE(TestCopyPaste
, testCopyPasteSpecialSkipEmptyMultiRangeRowFilteredTranspose
)
2250 executeCopyPasteSpecial(true, false, false, true, true, true, false, ScClipParam::Row
,
2252 checkCopyPasteSpecialMultiRangeRowFilteredTranspose(true);
2255 // tdf#45958, tdf#107348
2256 CPPUNIT_TEST_FIXTURE(TestCopyPaste
,
2257 testCopyPasteSpecialSkipEmptyMultiRangeRowFilteredIncludeFilteredTranspose
)
2259 // For bIncludeFiltered=true, the non-filtered outcome is expected
2260 executeCopyPasteSpecial(true, true, false, true, true, true, false, ScClipParam::Row
,
2262 checkCopyPasteSpecialMultiRangeRowTranspose(true);
2265 CPPUNIT_TEST_FIXTURE(TestCopyPaste
, testCutPasteSpecial
)
2267 const SCTAB srcSheet
= 0;
2268 const SCTAB destSheet
= 1;
2269 std::unique_ptr
<ScUndoCut
> pUndoCut
;
2270 std::unique_ptr
<ScUndoPaste
> pUndoPaste
;
2272 executeCopyPasteSpecial(srcSheet
, destSheet
, false, true, false, false, false, false, pUndoCut
,
2274 checkCopyPasteSpecial(false, true);
2278 checkCopyPasteSpecialInitial(srcSheet
);
2282 checkCopyPasteSpecial(false, true);
2286 checkCopyPasteSpecialInitial(srcSheet
);
2291 for (int i
= m_pDoc
->GetTableCount(); i
> 0; --i
)
2292 m_pDoc
->DeleteTab(i
- 1);
2295 CPPUNIT_TEST_FIXTURE(TestCopyPaste
, testCutPasteSpecialTranspose
)
2297 const SCTAB srcSheet
= 0;
2298 const SCTAB destSheet
= 1;
2299 std::unique_ptr
<ScUndoCut
> pUndoCut
;
2300 std::unique_ptr
<ScUndoPaste
> pUndoPaste
;
2302 executeCopyPasteSpecial(srcSheet
, destSheet
, false, true, false, true, false, false, pUndoCut
,
2304 checkCopyPasteSpecialTranspose(false, true);
2308 checkCopyPasteSpecialInitial(srcSheet
);
2312 checkCopyPasteSpecialTranspose(false, true);
2316 checkCopyPasteSpecialInitial(srcSheet
);
2321 for (int i
= m_pDoc
->GetTableCount(); i
> 0; --i
)
2322 m_pDoc
->DeleteTab(i
- 1);
2325 CPPUNIT_TEST_FIXTURE(TestCopyPaste
, testCutPasteSpecialSkipEmpty
)
2327 const SCTAB srcSheet
= 0;
2328 const SCTAB destSheet
= 1;
2329 std::unique_ptr
<ScUndoCut
> pUndoCut
;
2330 std::unique_ptr
<ScUndoPaste
> pUndoPaste
;
2332 executeCopyPasteSpecial(srcSheet
, destSheet
, false, true, false, false, false, true, pUndoCut
,
2334 checkCopyPasteSpecial(true, true);
2338 checkCopyPasteSpecialInitial(srcSheet
);
2342 checkCopyPasteSpecial(true, true);
2346 checkCopyPasteSpecialInitial(srcSheet
);
2351 for (int i
= m_pDoc
->GetTableCount(); i
> 0; --i
)
2352 m_pDoc
->DeleteTab(i
- 1);
2355 CPPUNIT_TEST_FIXTURE(TestCopyPaste
, testCutPasteSpecialSkipEmptyTranspose
)
2357 const SCTAB srcSheet
= 0;
2358 const SCTAB destSheet
= 1;
2359 std::unique_ptr
<ScUndoCut
> pUndoCut
;
2360 std::unique_ptr
<ScUndoPaste
> pUndoPaste
;
2362 executeCopyPasteSpecial(srcSheet
, destSheet
, false, true, false, true, false, true, pUndoCut
,
2364 checkCopyPasteSpecialTranspose(true, true);
2368 checkCopyPasteSpecialInitial(srcSheet
);
2372 checkCopyPasteSpecialTranspose(true, true);
2376 checkCopyPasteSpecialInitial(srcSheet
);
2381 for (int i
= m_pDoc
->GetTableCount(); i
> 0; --i
)
2382 m_pDoc
->DeleteTab(i
- 1);
2385 // check initial source
2386 void TestCopyPaste::checkCopyPasteSpecialInitial(const SCTAB srcSheet
)
2388 const EditTextObject
* pEditObj
;
2390 CPPUNIT_ASSERT_EQUAL(1.0, m_pDoc
->GetValue(1, 2, srcSheet
));
2391 CPPUNIT_ASSERT_EQUAL(2.0, m_pDoc
->GetValue(1, 3, srcSheet
));
2392 CPPUNIT_ASSERT_EQUAL(3.0, m_pDoc
->GetValue(1, 4, srcSheet
));
2393 CPPUNIT_ASSERT_EQUAL(4.0, m_pDoc
->GetValue(1, 5, srcSheet
));
2395 CPPUNIT_ASSERT_EQUAL(11.0, m_pDoc
->GetValue(2, 2, srcSheet
));
2396 CPPUNIT_ASSERT_EQUAL(u
"=B3+10"_ustr
, m_pDoc
->GetFormula(2, 2, srcSheet
));
2397 CPPUNIT_ASSERT_EQUAL(u
"=B4+20"_ustr
, m_pDoc
->GetFormula(2, 3, srcSheet
));
2398 CPPUNIT_ASSERT_EQUAL(22.0, m_pDoc
->GetValue(2, 3, srcSheet
));
2399 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(2, 4, srcSheet
));
2400 CPPUNIT_ASSERT_EQUAL(u
"=E5+30"_ustr
, m_pDoc
->GetFormula(2, 4, srcSheet
));
2401 CPPUNIT_ASSERT_EQUAL(42.0, m_pDoc
->GetValue(2, 5, srcSheet
));
2402 CPPUNIT_ASSERT_EQUAL(u
"=B4+40"_ustr
, m_pDoc
->GetFormula(2, 5, srcSheet
));
2404 CPPUNIT_ASSERT_EQUAL(u
"a"_ustr
, m_pDoc
->GetString(3, 2, srcSheet
));
2405 CPPUNIT_ASSERT_EQUAL(u
"b"_ustr
, m_pDoc
->GetString(3, 3, srcSheet
));
2406 CPPUNIT_ASSERT_EQUAL(u
"c"_ustr
, m_pDoc
->GetString(3, 4, srcSheet
));
2407 CPPUNIT_ASSERT_EQUAL(u
"d"_ustr
, m_pDoc
->GetString(3, 5, srcSheet
));
2409 pEditObj
= m_pDoc
->GetEditText(ScAddress(4, 2, srcSheet
));
2410 CPPUNIT_ASSERT(pEditObj
);
2411 CPPUNIT_ASSERT_EQUAL(u
"R1"_ustr
, pEditObj
->GetText(0));
2412 pEditObj
= m_pDoc
->GetEditText(ScAddress(4, 3, srcSheet
));
2413 CPPUNIT_ASSERT(pEditObj
);
2414 CPPUNIT_ASSERT_EQUAL(u
"R2"_ustr
, pEditObj
->GetText(0));
2415 CPPUNIT_ASSERT_EQUAL(5.0, m_pDoc
->GetValue(4, 4, srcSheet
));
2416 pEditObj
= m_pDoc
->GetEditText(ScAddress(4, 5, srcSheet
));
2417 CPPUNIT_ASSERT(pEditObj
);
2418 CPPUNIT_ASSERT_EQUAL(u
"R4"_ustr
, pEditObj
->GetText(0));
2420 CPPUNIT_ASSERT_EQUAL(u
"=B3+B5+60"_ustr
, m_pDoc
->GetFormula(5, 2, srcSheet
));
2421 CPPUNIT_ASSERT_EQUAL(64.0, m_pDoc
->GetValue(5, 2, srcSheet
));
2422 CPPUNIT_ASSERT_EQUAL(OUString(), m_pDoc
->GetString(5, 3, srcSheet
));
2423 CPPUNIT_ASSERT_EQUAL(OUString(), m_pDoc
->GetString(5, 4, srcSheet
));
2424 CPPUNIT_ASSERT_EQUAL(u
"=B3+B5+70"_ustr
, m_pDoc
->GetFormula(5, 5, srcSheet
));
2425 CPPUNIT_ASSERT_EQUAL(74.0, m_pDoc
->GetValue(5, 5, srcSheet
));
2427 CPPUNIT_ASSERT_EQUAL(u
"=SUMIF(B3:B6;\"<4\")"_ustr
, m_pDoc
->GetFormula(6, 2, srcSheet
));
2428 CPPUNIT_ASSERT_EQUAL(6.0, m_pDoc
->GetValue(6, 2, srcSheet
));
2429 CPPUNIT_ASSERT_EQUAL(OUString(), m_pDoc
->GetString(6, 3, srcSheet
));
2430 CPPUNIT_ASSERT_EQUAL(OUString(), m_pDoc
->GetString(6, 4, srcSheet
));
2431 CPPUNIT_ASSERT_EQUAL(u
"=C$3+$B$5+80"_ustr
, m_pDoc
->GetFormula(6, 5, srcSheet
));
2432 CPPUNIT_ASSERT_EQUAL(94.0, m_pDoc
->GetValue(6, 5, srcSheet
));
2435 const SfxPoolItem
* pItem
= nullptr;
2436 m_pDoc
->GetPattern(ScAddress(1, 2, srcSheet
))->GetItemSet().HasItem(ATTR_BACKGROUND
, &pItem
);
2437 CPPUNIT_ASSERT(pItem
);
2438 CPPUNIT_ASSERT_EQUAL(COL_BLUE
, static_cast<const SvxBrushItem
*>(pItem
)->GetColor());
2439 m_pDoc
->GetPattern(ScAddress(1, 3, srcSheet
))->GetItemSet().HasItem(ATTR_BACKGROUND
, &pItem
);
2440 CPPUNIT_ASSERT(pItem
);
2441 CPPUNIT_ASSERT_EQUAL(COL_BLUE
, static_cast<const SvxBrushItem
*>(pItem
)->GetColor());
2442 m_pDoc
->GetPattern(ScAddress(1, 4, srcSheet
))->GetItemSet().HasItem(ATTR_BACKGROUND
, &pItem
);
2443 CPPUNIT_ASSERT_EQUAL(COL_BLUE
, static_cast<const SvxBrushItem
*>(pItem
)->GetColor());
2444 m_pDoc
->GetPattern(ScAddress(1, 5, srcSheet
))->GetItemSet().HasItem(ATTR_BACKGROUND
, &pItem
);
2445 CPPUNIT_ASSERT(!pItem
);
2446 m_pDoc
->GetPattern(ScAddress(1, 6, srcSheet
))->GetItemSet().HasItem(ATTR_BACKGROUND
, &pItem
);
2447 CPPUNIT_ASSERT(!pItem
);
2448 m_pDoc
->GetPattern(ScAddress(5, 4, srcSheet
))->GetItemSet().HasItem(ATTR_BACKGROUND
, &pItem
);
2449 CPPUNIT_ASSERT(pItem
);
2450 CPPUNIT_ASSERT_EQUAL(COL_GREEN
, static_cast<const SvxBrushItem
*>(pItem
)->GetColor());
2452 // check border, left and right borders were transformed to top and bottom borders
2453 pItem
= m_pDoc
->GetAttr(ScAddress(2, 2, srcSheet
), ATTR_BORDER
);
2454 CPPUNIT_ASSERT(pItem
);
2455 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetTop());
2456 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetBottom());
2457 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetLeft());
2458 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetRight());
2459 pItem
= m_pDoc
->GetAttr(ScAddress(2, 3, srcSheet
), ATTR_BORDER
);
2460 CPPUNIT_ASSERT(pItem
);
2461 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetTop());
2462 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetBottom());
2463 CPPUNIT_ASSERT(static_cast<const SvxBoxItem
*>(pItem
)->GetLeft());
2464 CPPUNIT_ASSERT(static_cast<const SvxBoxItem
*>(pItem
)->GetRight());
2465 pItem
= m_pDoc
->GetAttr(ScAddress(2, 4, srcSheet
), ATTR_BORDER
);
2466 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetTop());
2467 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetBottom());
2468 CPPUNIT_ASSERT(static_cast<const SvxBoxItem
*>(pItem
)->GetLeft());
2469 CPPUNIT_ASSERT(static_cast<const SvxBoxItem
*>(pItem
)->GetRight());
2470 pItem
= m_pDoc
->GetAttr(ScAddress(2, 5, srcSheet
), ATTR_BORDER
);
2471 CPPUNIT_ASSERT(pItem
);
2472 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetTop());
2473 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetBottom());
2474 CPPUNIT_ASSERT(static_cast<const SvxBoxItem
*>(pItem
)->GetLeft());
2475 CPPUNIT_ASSERT(static_cast<const SvxBoxItem
*>(pItem
)->GetRight());
2476 pItem
= m_pDoc
->GetAttr(ScAddress(2, 6, srcSheet
), ATTR_BORDER
);
2477 CPPUNIT_ASSERT(pItem
);
2478 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetTop());
2479 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetBottom());
2480 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetLeft());
2481 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetRight());
2483 // check notes after transposed copy/paste
2484 // check presence of notes
2485 CPPUNIT_ASSERT(m_pDoc
->HasNote(1, 2, srcSheet
));
2486 CPPUNIT_ASSERT(m_pDoc
->HasNote(2, 2, srcSheet
));
2487 CPPUNIT_ASSERT(!m_pDoc
->HasNote(3, 2, srcSheet
));
2488 CPPUNIT_ASSERT(m_pDoc
->HasNote(4, 2, srcSheet
));
2489 CPPUNIT_ASSERT(!m_pDoc
->HasNote(5, 2, srcSheet
));
2490 CPPUNIT_ASSERT(!m_pDoc
->HasNote(6, 2, srcSheet
));
2491 CPPUNIT_ASSERT(!m_pDoc
->HasNote(7, 2, srcSheet
));
2492 CPPUNIT_ASSERT(m_pDoc
->HasNote(1, 3, srcSheet
));
2493 CPPUNIT_ASSERT(!m_pDoc
->HasNote(2, 3, srcSheet
));
2494 CPPUNIT_ASSERT(m_pDoc
->HasNote(3, 3, srcSheet
));
2495 CPPUNIT_ASSERT(m_pDoc
->HasNote(4, 3, srcSheet
));
2496 CPPUNIT_ASSERT(!m_pDoc
->HasNote(5, 3, srcSheet
));
2497 CPPUNIT_ASSERT(m_pDoc
->HasNote(6, 3, srcSheet
));
2498 CPPUNIT_ASSERT(!m_pDoc
->HasNote(7, 3, srcSheet
));
2499 CPPUNIT_ASSERT(m_pDoc
->HasNote(1, 4, srcSheet
));
2500 CPPUNIT_ASSERT(m_pDoc
->HasNote(2, 4, srcSheet
));
2501 CPPUNIT_ASSERT(m_pDoc
->HasNote(3, 4, srcSheet
));
2502 CPPUNIT_ASSERT(m_pDoc
->HasNote(4, 4, srcSheet
));
2503 CPPUNIT_ASSERT(m_pDoc
->HasNote(5, 4, srcSheet
));
2504 CPPUNIT_ASSERT(!m_pDoc
->HasNote(6, 4, srcSheet
));
2505 CPPUNIT_ASSERT(!m_pDoc
->HasNote(7, 4, srcSheet
));
2506 CPPUNIT_ASSERT(!m_pDoc
->HasNote(1, 5, srcSheet
));
2507 CPPUNIT_ASSERT(m_pDoc
->HasNote(2, 5, srcSheet
));
2508 CPPUNIT_ASSERT(m_pDoc
->HasNote(3, 5, srcSheet
));
2509 CPPUNIT_ASSERT(m_pDoc
->HasNote(4, 5, srcSheet
));
2510 CPPUNIT_ASSERT(m_pDoc
->HasNote(5, 5, srcSheet
));
2511 CPPUNIT_ASSERT(m_pDoc
->HasNote(6, 5, srcSheet
));
2512 CPPUNIT_ASSERT(!m_pDoc
->HasNote(7, 5, srcSheet
));
2513 CPPUNIT_ASSERT(!m_pDoc
->HasNote(1, 6, srcSheet
));
2514 CPPUNIT_ASSERT(!m_pDoc
->HasNote(2, 6, srcSheet
));
2515 CPPUNIT_ASSERT(m_pDoc
->HasNote(3, 6, srcSheet
));
2516 CPPUNIT_ASSERT(!m_pDoc
->HasNote(4, 6, srcSheet
));
2517 CPPUNIT_ASSERT(!m_pDoc
->HasNote(5, 6, srcSheet
));
2518 CPPUNIT_ASSERT(!m_pDoc
->HasNote(6, 6, srcSheet
));
2519 CPPUNIT_ASSERT(!m_pDoc
->HasNote(7, 6, srcSheet
));
2521 // check values of notes
2522 CPPUNIT_ASSERT_EQUAL(u
"Note A1"_ustr
, getNote(1, 2, srcSheet
));
2523 CPPUNIT_ASSERT_EQUAL(u
"Note A2"_ustr
, getNote(1, 3, srcSheet
));
2524 CPPUNIT_ASSERT_EQUAL(u
"Note A3"_ustr
, getNote(1, 4, srcSheet
));
2525 CPPUNIT_ASSERT_EQUAL(u
"Note B1"_ustr
, getNote(2, 2, srcSheet
));
2526 CPPUNIT_ASSERT_EQUAL(u
"Note B3"_ustr
, getNote(2, 4, srcSheet
));
2527 CPPUNIT_ASSERT_EQUAL(u
"Note C2"_ustr
, getNote(3, 3, srcSheet
));
2528 CPPUNIT_ASSERT_EQUAL(u
"Note C3"_ustr
, getNote(3, 4, srcSheet
));
2529 CPPUNIT_ASSERT_EQUAL(u
"Note D1"_ustr
, getNote(4, 2, srcSheet
));
2530 CPPUNIT_ASSERT_EQUAL(u
"Note D2"_ustr
, getNote(4, 3, srcSheet
));
2531 CPPUNIT_ASSERT_EQUAL(u
"Note D3"_ustr
, getNote(4, 4, srcSheet
));
2532 CPPUNIT_ASSERT_EQUAL(u
"Note E2"_ustr
, getNote(5, 4, srcSheet
));
2533 CPPUNIT_ASSERT_EQUAL(u
"Note E4"_ustr
, getNote(5, 5, srcSheet
));
2534 CPPUNIT_ASSERT_EQUAL(u
"Note F2"_ustr
, getNote(6, 3, srcSheet
));
2535 CPPUNIT_ASSERT_EQUAL(u
"Note F4"_ustr
, getNote(6, 5, srcSheet
));
2537 CPPUNIT_ASSERT_EQUAL(u
"=C5"_ustr
, m_pDoc
->GetFormula(1, 16, srcSheet
));
2538 CPPUNIT_ASSERT_EQUAL(u
"=$C$5"_ustr
, m_pDoc
->GetFormula(2, 16, srcSheet
));
2539 CPPUNIT_ASSERT_EQUAL(u
"=$C5"_ustr
, m_pDoc
->GetFormula(3, 16, srcSheet
));
2540 CPPUNIT_ASSERT_EQUAL(u
"=C$5"_ustr
, m_pDoc
->GetFormula(4, 16, srcSheet
));
2541 CPPUNIT_ASSERT_EQUAL(u
"=SUM(C5:C5)"_ustr
, m_pDoc
->GetFormula(5, 16, srcSheet
));
2542 CPPUNIT_ASSERT_EQUAL(u
"=SUM($C$5:$C$5)"_ustr
, m_pDoc
->GetFormula(6, 16, srcSheet
));
2543 CPPUNIT_ASSERT_EQUAL(u
"=SUM($C5:$C5)"_ustr
, m_pDoc
->GetFormula(7, 16, srcSheet
));
2544 CPPUNIT_ASSERT_EQUAL(u
"=SUM(C$5:C$5)"_ustr
, m_pDoc
->GetFormula(8, 16, srcSheet
));
2545 CPPUNIT_ASSERT_EQUAL(u
"=SUM($B$3:$B$6)"_ustr
, m_pDoc
->GetFormula(9, 16, srcSheet
));
2546 CPPUNIT_ASSERT_EQUAL(u
"=SUM($B$3:$B$10)"_ustr
, m_pDoc
->GetFormula(10, 16, srcSheet
));
2548 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(1, 16, srcSheet
));
2549 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(2, 16, srcSheet
));
2550 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(3, 16, srcSheet
));
2551 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(4, 16, srcSheet
));
2552 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(5, 16, srcSheet
));
2553 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(6, 16, srcSheet
));
2554 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(7, 16, srcSheet
));
2555 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(8, 16, srcSheet
));
2556 CPPUNIT_ASSERT_EQUAL(10.0, m_pDoc
->GetValue(9, 16, srcSheet
));
2557 CPPUNIT_ASSERT_EQUAL(-17.0, m_pDoc
->GetValue(10, 16, srcSheet
));
2559 CPPUNIT_ASSERT_EQUAL(u
"=Range_C5"_ustr
, m_pDoc
->GetFormula(1, 17, srcSheet
));
2560 CPPUNIT_ASSERT_EQUAL(u
"=Range_aCa5"_ustr
, m_pDoc
->GetFormula(2, 17, srcSheet
));
2561 CPPUNIT_ASSERT_EQUAL(u
"=Range_aC5"_ustr
, m_pDoc
->GetFormula(3, 17, srcSheet
));
2562 CPPUNIT_ASSERT_EQUAL(u
"=Range_Ca5"_ustr
, m_pDoc
->GetFormula(4, 17, srcSheet
));
2563 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_C5_C5)"_ustr
, m_pDoc
->GetFormula(5, 17, srcSheet
));
2564 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_aCa5_aCa5)"_ustr
, m_pDoc
->GetFormula(6, 17, srcSheet
));
2565 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_aC5_aC5)"_ustr
, m_pDoc
->GetFormula(7, 17, srcSheet
));
2566 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_Ca5_Ca5)"_ustr
, m_pDoc
->GetFormula(8, 17, srcSheet
));
2567 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_aCa5_aCa8)"_ustr
, m_pDoc
->GetFormula(9, 17, srcSheet
));
2568 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_aCa5_aCa10)"_ustr
, m_pDoc
->GetFormula(10, 17, srcSheet
));
2570 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(1, 17, srcSheet
));
2571 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(2, 17, srcSheet
));
2572 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(3, 17, srcSheet
));
2573 CPPUNIT_ASSERT_EQUAL(5.0, m_pDoc
->GetValue(4, 17, srcSheet
));
2574 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(5, 17, srcSheet
));
2575 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(6, 17, srcSheet
));
2576 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(7, 17, srcSheet
));
2577 CPPUNIT_ASSERT_EQUAL(123.0, m_pDoc
->GetValue(8, 17, srcSheet
));
2578 CPPUNIT_ASSERT_EQUAL(10.0, m_pDoc
->GetValue(9, 17, srcSheet
));
2579 CPPUNIT_ASSERT_EQUAL(-17.0, m_pDoc
->GetValue(10, 17, srcSheet
));
2581 // Existing references to the destination range must not change
2582 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.D1"_ustr
, m_pDoc
->GetFormula(3, 101, srcSheet
));
2583 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.D2"_ustr
, m_pDoc
->GetFormula(3, 102, srcSheet
));
2584 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.D3"_ustr
, m_pDoc
->GetFormula(3, 103, srcSheet
));
2585 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.D4"_ustr
, m_pDoc
->GetFormula(3, 104, srcSheet
));
2586 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.D5"_ustr
, m_pDoc
->GetFormula(3, 105, srcSheet
));
2587 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.D6"_ustr
, m_pDoc
->GetFormula(3, 106, srcSheet
));
2588 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.D7"_ustr
, m_pDoc
->GetFormula(3, 107, srcSheet
));
2589 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.E1"_ustr
, m_pDoc
->GetFormula(4, 101, srcSheet
));
2590 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.E2"_ustr
, m_pDoc
->GetFormula(4, 102, srcSheet
));
2591 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.E3"_ustr
, m_pDoc
->GetFormula(4, 103, srcSheet
));
2592 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.E4"_ustr
, m_pDoc
->GetFormula(4, 104, srcSheet
));
2593 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.E5"_ustr
, m_pDoc
->GetFormula(4, 105, srcSheet
));
2594 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.E6"_ustr
, m_pDoc
->GetFormula(4, 106, srcSheet
));
2595 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.E7"_ustr
, m_pDoc
->GetFormula(4, 107, srcSheet
));
2596 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.F1"_ustr
, m_pDoc
->GetFormula(5, 101, srcSheet
));
2597 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.F2"_ustr
, m_pDoc
->GetFormula(5, 102, srcSheet
));
2598 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.F3"_ustr
, m_pDoc
->GetFormula(5, 103, srcSheet
));
2599 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.F4"_ustr
, m_pDoc
->GetFormula(5, 104, srcSheet
));
2600 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.F5"_ustr
, m_pDoc
->GetFormula(5, 105, srcSheet
));
2601 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.F6"_ustr
, m_pDoc
->GetFormula(5, 106, srcSheet
));
2602 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.F7"_ustr
, m_pDoc
->GetFormula(5, 107, srcSheet
));
2603 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.G1"_ustr
, m_pDoc
->GetFormula(6, 101, srcSheet
));
2604 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.G2"_ustr
, m_pDoc
->GetFormula(6, 102, srcSheet
));
2605 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.G3"_ustr
, m_pDoc
->GetFormula(6, 103, srcSheet
));
2606 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.G4"_ustr
, m_pDoc
->GetFormula(6, 104, srcSheet
));
2607 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.G5"_ustr
, m_pDoc
->GetFormula(6, 105, srcSheet
));
2608 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.G6"_ustr
, m_pDoc
->GetFormula(6, 106, srcSheet
));
2609 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.G7"_ustr
, m_pDoc
->GetFormula(6, 107, srcSheet
));
2610 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.H1"_ustr
, m_pDoc
->GetFormula(7, 101, srcSheet
));
2611 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.H2"_ustr
, m_pDoc
->GetFormula(7, 102, srcSheet
));
2612 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.H3"_ustr
, m_pDoc
->GetFormula(7, 103, srcSheet
));
2613 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.H4"_ustr
, m_pDoc
->GetFormula(7, 104, srcSheet
));
2614 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.H5"_ustr
, m_pDoc
->GetFormula(7, 105, srcSheet
));
2615 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.H6"_ustr
, m_pDoc
->GetFormula(7, 106, srcSheet
));
2616 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.H7"_ustr
, m_pDoc
->GetFormula(7, 107, srcSheet
));
2617 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.I1"_ustr
, m_pDoc
->GetFormula(8, 101, srcSheet
));
2618 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.I2"_ustr
, m_pDoc
->GetFormula(8, 102, srcSheet
));
2619 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.I3"_ustr
, m_pDoc
->GetFormula(8, 103, srcSheet
));
2620 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.I4"_ustr
, m_pDoc
->GetFormula(8, 104, srcSheet
));
2621 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.I5"_ustr
, m_pDoc
->GetFormula(8, 105, srcSheet
));
2622 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.I6"_ustr
, m_pDoc
->GetFormula(8, 106, srcSheet
));
2623 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.I7"_ustr
, m_pDoc
->GetFormula(8, 107, srcSheet
));
2624 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.J1"_ustr
, m_pDoc
->GetFormula(9, 101, srcSheet
));
2625 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.J2"_ustr
, m_pDoc
->GetFormula(9, 102, srcSheet
));
2626 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.J3"_ustr
, m_pDoc
->GetFormula(9, 103, srcSheet
));
2627 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.J4"_ustr
, m_pDoc
->GetFormula(9, 104, srcSheet
));
2628 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.J5"_ustr
, m_pDoc
->GetFormula(9, 105, srcSheet
));
2629 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.J6"_ustr
, m_pDoc
->GetFormula(9, 106, srcSheet
));
2630 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.J7"_ustr
, m_pDoc
->GetFormula(9, 107, srcSheet
));
2633 // Base check, nothing filtered, nothing transposed
2634 void TestCopyPaste::checkCopyPasteSpecial(bool bSkipEmpty
, bool bCut
)
2636 const SCTAB srcSheet
= 0;
2637 const SCTAB destSheet
= 1;
2640 | D | E | F | G | H | I |
2642 2 | 1 B*| =D2+10 *| a | R1 *| =D2+D4+60 | =SUMIF(D2:D5;"<4") |
2643 3 | 2 B*| =D3+20 b | b *| R2 *| | *|
2644 4 | 3 B*| =G4+30 b*| c *| 5 *| B*| |
2645 5 | 4 | =D3+40 b*| d *| R4 *| =D2+D4+70 *| =E$3+$B$5+80 *|
2647 * means note attached
2652 const EditTextObject
* pEditObj
;
2654 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(2, 0, destSheet
));
2655 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(2, 1, destSheet
));
2656 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(2, 2, destSheet
));
2657 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(2, 3, destSheet
));
2658 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(2, 4, destSheet
));
2659 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(2, 5, destSheet
));
2661 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(3, 0, destSheet
));
2662 CPPUNIT_ASSERT_EQUAL(1.0, m_pDoc
->GetValue(3, 1, destSheet
));
2663 CPPUNIT_ASSERT_EQUAL(2.0, m_pDoc
->GetValue(3, 2, destSheet
));
2664 CPPUNIT_ASSERT_EQUAL(3.0, m_pDoc
->GetValue(3, 3, destSheet
));
2665 CPPUNIT_ASSERT_EQUAL(4.0, m_pDoc
->GetValue(3, 4, destSheet
));
2666 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(3, 5, destSheet
));
2668 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(4, 0, destSheet
));
2669 CPPUNIT_ASSERT_EQUAL(11.0, m_pDoc
->GetValue(4, 1, destSheet
));
2670 CPPUNIT_ASSERT_EQUAL(u
"=D2+10"_ustr
, m_pDoc
->GetFormula(4, 1, destSheet
));
2671 CPPUNIT_ASSERT_EQUAL(u
"=D3+20"_ustr
, m_pDoc
->GetFormula(4, 2, destSheet
));
2672 CPPUNIT_ASSERT_EQUAL(22.0, m_pDoc
->GetValue(4, 2, destSheet
));
2673 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(4, 3, destSheet
));
2674 CPPUNIT_ASSERT_EQUAL(u
"=G4+30"_ustr
, m_pDoc
->GetFormula(4, 3, destSheet
));
2675 CPPUNIT_ASSERT_EQUAL(42.0, m_pDoc
->GetValue(4, 4, destSheet
));
2676 CPPUNIT_ASSERT_EQUAL(u
"=D3+40"_ustr
, m_pDoc
->GetFormula(4, 4, destSheet
));
2677 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(4, 5, destSheet
));
2679 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(5, 0, destSheet
));
2680 CPPUNIT_ASSERT_EQUAL(u
"1000"_ustr
, m_pDoc
->GetString(5, 0, destSheet
));
2681 CPPUNIT_ASSERT_EQUAL(u
"a"_ustr
, m_pDoc
->GetString(5, 1, destSheet
));
2682 CPPUNIT_ASSERT_EQUAL(u
"b"_ustr
, m_pDoc
->GetString(5, 2, destSheet
));
2683 CPPUNIT_ASSERT_EQUAL(u
"c"_ustr
, m_pDoc
->GetString(5, 3, destSheet
));
2684 CPPUNIT_ASSERT_EQUAL(u
"d"_ustr
, m_pDoc
->GetString(5, 4, destSheet
));
2685 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(5, 5, destSheet
));
2686 CPPUNIT_ASSERT_EQUAL(u
"1000"_ustr
, m_pDoc
->GetString(5, 5, destSheet
));
2688 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(6, 0, destSheet
));
2689 pEditObj
= m_pDoc
->GetEditText(ScAddress(6, 0, destSheet
));
2690 CPPUNIT_ASSERT(pEditObj
== nullptr);
2691 pEditObj
= m_pDoc
->GetEditText(ScAddress(6, 1, destSheet
));
2692 CPPUNIT_ASSERT(pEditObj
);
2693 CPPUNIT_ASSERT_EQUAL(u
"R1"_ustr
, pEditObj
->GetText(0));
2694 pEditObj
= m_pDoc
->GetEditText(ScAddress(6, 2, destSheet
));
2695 CPPUNIT_ASSERT(pEditObj
);
2696 CPPUNIT_ASSERT_EQUAL(u
"R2"_ustr
, pEditObj
->GetText(0));
2697 CPPUNIT_ASSERT_EQUAL(5.0, m_pDoc
->GetValue(6, 3, destSheet
));
2698 pEditObj
= m_pDoc
->GetEditText(ScAddress(6, 4, destSheet
));
2699 CPPUNIT_ASSERT(pEditObj
);
2700 CPPUNIT_ASSERT_EQUAL(u
"R4"_ustr
, pEditObj
->GetText(0));
2701 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(6, 5, destSheet
));
2702 pEditObj
= m_pDoc
->GetEditText(ScAddress(6, 5, destSheet
));
2703 CPPUNIT_ASSERT(pEditObj
== nullptr);
2705 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(7, 0, destSheet
));
2706 CPPUNIT_ASSERT_EQUAL(u
"1000"_ustr
, m_pDoc
->GetString(7, 0, destSheet
));
2707 CPPUNIT_ASSERT_EQUAL(u
"=D2+D4+60"_ustr
, m_pDoc
->GetFormula(7, 1, destSheet
));
2708 CPPUNIT_ASSERT_EQUAL(64.0, m_pDoc
->GetValue(7, 1, destSheet
));
2711 CPPUNIT_ASSERT_EQUAL(OUString(), m_pDoc
->GetString(7, 2, destSheet
));
2712 CPPUNIT_ASSERT_EQUAL(OUString(), m_pDoc
->GetString(7, 3, destSheet
));
2716 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(7, 2, destSheet
));
2717 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(7, 3, destSheet
));
2719 CPPUNIT_ASSERT_EQUAL(u
"=D2+D4+70"_ustr
, m_pDoc
->GetFormula(7, 4, destSheet
));
2720 CPPUNIT_ASSERT_EQUAL(74.0, m_pDoc
->GetValue(7, 4, destSheet
));
2721 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(7, 5, destSheet
));
2722 CPPUNIT_ASSERT_EQUAL(u
"1000"_ustr
, m_pDoc
->GetString(7, 5, destSheet
));
2724 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(8, 0, destSheet
));
2725 CPPUNIT_ASSERT_EQUAL(u
"1000"_ustr
, m_pDoc
->GetString(8, 0, destSheet
));
2726 CPPUNIT_ASSERT_EQUAL(u
"=SUMIF(D2:D5;\"<4\")"_ustr
, m_pDoc
->GetFormula(8, 1, destSheet
));
2727 CPPUNIT_ASSERT_EQUAL(6.0, m_pDoc
->GetValue(8, 1, destSheet
));
2730 CPPUNIT_ASSERT_EQUAL(OUString(), m_pDoc
->GetString(8, 2, destSheet
));
2731 CPPUNIT_ASSERT_EQUAL(OUString(), m_pDoc
->GetString(8, 3, destSheet
));
2735 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(8, 2, destSheet
));
2736 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(8, 3, destSheet
));
2738 double fValue
= m_pDoc
->GetValue(8, 4, destSheet
);
2739 OUString aStr
= m_pDoc
->GetFormula(8, 4, destSheet
);
2742 CPPUNIT_ASSERT_EQUAL(u
"=E$3+$B$5+80"_ustr
, aStr
);
2743 CPPUNIT_ASSERT_EQUAL(1102.0, fValue
);
2747 CPPUNIT_ASSERT_EQUAL(u
"=E$2+$D$4+80"_ustr
, aStr
);
2748 CPPUNIT_ASSERT_EQUAL(94.0, fValue
);
2750 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(8, 5, destSheet
));
2751 CPPUNIT_ASSERT_EQUAL(u
"1000"_ustr
, m_pDoc
->GetString(8, 5, destSheet
));
2753 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(9, 0, destSheet
));
2754 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(9, 1, destSheet
));
2755 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(9, 2, destSheet
));
2756 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(9, 3, destSheet
));
2757 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(9, 4, destSheet
));
2758 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(9, 5, destSheet
));
2761 const SfxPoolItem
* pItem
= nullptr;
2762 m_pDoc
->GetPattern(ScAddress(3, 1, destSheet
))->GetItemSet().HasItem(ATTR_BACKGROUND
, &pItem
);
2763 CPPUNIT_ASSERT(pItem
);
2764 CPPUNIT_ASSERT_EQUAL(COL_BLUE
, static_cast<const SvxBrushItem
*>(pItem
)->GetColor());
2765 m_pDoc
->GetPattern(ScAddress(3, 2, destSheet
))->GetItemSet().HasItem(ATTR_BACKGROUND
, &pItem
);
2766 CPPUNIT_ASSERT(pItem
);
2767 CPPUNIT_ASSERT_EQUAL(COL_BLUE
, static_cast<const SvxBrushItem
*>(pItem
)->GetColor());
2768 m_pDoc
->GetPattern(ScAddress(3, 3, destSheet
))->GetItemSet().HasItem(ATTR_BACKGROUND
, &pItem
);
2769 CPPUNIT_ASSERT_EQUAL(COL_BLUE
, static_cast<const SvxBrushItem
*>(pItem
)->GetColor());
2770 m_pDoc
->GetPattern(ScAddress(3, 4, destSheet
))->GetItemSet().HasItem(ATTR_BACKGROUND
, &pItem
);
2771 CPPUNIT_ASSERT(!pItem
);
2772 m_pDoc
->GetPattern(ScAddress(3, 5, destSheet
))->GetItemSet().HasItem(ATTR_BACKGROUND
, &pItem
);
2773 CPPUNIT_ASSERT(!pItem
);
2774 m_pDoc
->GetPattern(ScAddress(7, 3, destSheet
))->GetItemSet().HasItem(ATTR_BACKGROUND
, &pItem
);
2775 CPPUNIT_ASSERT_EQUAL(bSkipEmpty
, pItem
== nullptr);
2777 CPPUNIT_ASSERT_EQUAL(COL_GREEN
, static_cast<const SvxBrushItem
*>(pItem
)->GetColor());
2779 // check border, left and right borders were transformed to top and bottom borders
2780 pItem
= m_pDoc
->GetAttr(ScAddress(4, 1, destSheet
), ATTR_BORDER
);
2781 CPPUNIT_ASSERT(pItem
);
2782 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetTop());
2783 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetBottom());
2784 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetLeft());
2785 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetRight());
2786 pItem
= m_pDoc
->GetAttr(ScAddress(4, 2, destSheet
), ATTR_BORDER
);
2787 CPPUNIT_ASSERT(pItem
);
2788 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetTop());
2789 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetBottom());
2790 CPPUNIT_ASSERT(static_cast<const SvxBoxItem
*>(pItem
)->GetLeft());
2791 CPPUNIT_ASSERT(static_cast<const SvxBoxItem
*>(pItem
)->GetRight());
2792 pItem
= m_pDoc
->GetAttr(ScAddress(4, 3, destSheet
), ATTR_BORDER
);
2793 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetTop());
2794 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetBottom());
2795 CPPUNIT_ASSERT(static_cast<const SvxBoxItem
*>(pItem
)->GetLeft());
2796 CPPUNIT_ASSERT(static_cast<const SvxBoxItem
*>(pItem
)->GetRight());
2797 pItem
= m_pDoc
->GetAttr(ScAddress(4, 4, destSheet
), ATTR_BORDER
);
2798 CPPUNIT_ASSERT(pItem
);
2799 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetTop());
2800 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetBottom());
2801 CPPUNIT_ASSERT(static_cast<const SvxBoxItem
*>(pItem
)->GetLeft());
2802 CPPUNIT_ASSERT(static_cast<const SvxBoxItem
*>(pItem
)->GetRight());
2803 pItem
= m_pDoc
->GetAttr(ScAddress(4, 5, destSheet
), ATTR_BORDER
);
2804 CPPUNIT_ASSERT(pItem
);
2805 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetTop());
2806 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetBottom());
2807 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetLeft());
2808 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetRight());
2810 // check notes after transposed copy/paste
2811 // check presence of notes
2812 CPPUNIT_ASSERT(!m_pDoc
->HasNote(2, 0, destSheet
));
2813 CPPUNIT_ASSERT(!m_pDoc
->HasNote(3, 0, destSheet
));
2814 CPPUNIT_ASSERT(!m_pDoc
->HasNote(4, 0, destSheet
));
2815 CPPUNIT_ASSERT(!m_pDoc
->HasNote(5, 0, destSheet
));
2816 CPPUNIT_ASSERT(!m_pDoc
->HasNote(6, 0, destSheet
));
2817 CPPUNIT_ASSERT(!m_pDoc
->HasNote(7, 0, destSheet
));
2818 CPPUNIT_ASSERT(!m_pDoc
->HasNote(8, 0, destSheet
));
2819 CPPUNIT_ASSERT(!m_pDoc
->HasNote(9, 0, destSheet
));
2820 CPPUNIT_ASSERT(!m_pDoc
->HasNote(2, 1, destSheet
));
2821 CPPUNIT_ASSERT(m_pDoc
->HasNote(3, 1, destSheet
));
2822 CPPUNIT_ASSERT(m_pDoc
->HasNote(4, 1, destSheet
));
2823 CPPUNIT_ASSERT(!m_pDoc
->HasNote(5, 1, destSheet
));
2824 CPPUNIT_ASSERT(m_pDoc
->HasNote(6, 1, destSheet
));
2825 CPPUNIT_ASSERT(!m_pDoc
->HasNote(7, 1, destSheet
));
2826 CPPUNIT_ASSERT(!m_pDoc
->HasNote(8, 1, destSheet
));
2827 CPPUNIT_ASSERT(!m_pDoc
->HasNote(9, 1, destSheet
));
2828 CPPUNIT_ASSERT(!m_pDoc
->HasNote(2, 2, destSheet
));
2829 CPPUNIT_ASSERT(m_pDoc
->HasNote(3, 2, destSheet
));
2830 CPPUNIT_ASSERT(!m_pDoc
->HasNote(4, 2, destSheet
));
2831 CPPUNIT_ASSERT(m_pDoc
->HasNote(5, 2, destSheet
));
2832 CPPUNIT_ASSERT(m_pDoc
->HasNote(6, 2, destSheet
));
2833 CPPUNIT_ASSERT(!m_pDoc
->HasNote(7, 2, destSheet
));
2834 CPPUNIT_ASSERT_EQUAL(!bSkipEmpty
, m_pDoc
->HasNote(8, 2, destSheet
));
2835 CPPUNIT_ASSERT(!m_pDoc
->HasNote(9, 2, destSheet
));
2836 CPPUNIT_ASSERT(!m_pDoc
->HasNote(2, 3, destSheet
));
2837 CPPUNIT_ASSERT(m_pDoc
->HasNote(3, 3, destSheet
));
2838 CPPUNIT_ASSERT(m_pDoc
->HasNote(4, 3, destSheet
));
2839 CPPUNIT_ASSERT(m_pDoc
->HasNote(5, 3, destSheet
));
2840 CPPUNIT_ASSERT(m_pDoc
->HasNote(6, 3, destSheet
));
2841 CPPUNIT_ASSERT_EQUAL(!bSkipEmpty
, m_pDoc
->HasNote(7, 3, destSheet
));
2842 CPPUNIT_ASSERT(!m_pDoc
->HasNote(8, 3, destSheet
));
2843 CPPUNIT_ASSERT(!m_pDoc
->HasNote(9, 3, destSheet
));
2844 CPPUNIT_ASSERT(!m_pDoc
->HasNote(2, 4, destSheet
));
2845 CPPUNIT_ASSERT(!m_pDoc
->HasNote(3, 4, destSheet
));
2846 CPPUNIT_ASSERT(m_pDoc
->HasNote(4, 4, destSheet
));
2847 CPPUNIT_ASSERT(m_pDoc
->HasNote(5, 4, destSheet
));
2848 CPPUNIT_ASSERT(m_pDoc
->HasNote(6, 4, destSheet
));
2849 CPPUNIT_ASSERT(m_pDoc
->HasNote(7, 4, destSheet
));
2850 CPPUNIT_ASSERT(m_pDoc
->HasNote(8, 4, destSheet
));
2851 CPPUNIT_ASSERT(!m_pDoc
->HasNote(9, 4, destSheet
));
2852 CPPUNIT_ASSERT(!m_pDoc
->HasNote(2, 5, destSheet
));
2853 CPPUNIT_ASSERT(!m_pDoc
->HasNote(3, 5, destSheet
));
2854 CPPUNIT_ASSERT(!m_pDoc
->HasNote(4, 5, destSheet
));
2855 CPPUNIT_ASSERT(!m_pDoc
->HasNote(5, 5, destSheet
));
2856 CPPUNIT_ASSERT(!m_pDoc
->HasNote(6, 5, destSheet
));
2857 CPPUNIT_ASSERT(!m_pDoc
->HasNote(7, 5, destSheet
));
2858 CPPUNIT_ASSERT(!m_pDoc
->HasNote(8, 5, destSheet
));
2859 CPPUNIT_ASSERT(!m_pDoc
->HasNote(9, 5, destSheet
));
2861 // check values of notes
2862 CPPUNIT_ASSERT_EQUAL(u
"Note A1"_ustr
, getNote(3, 1, destSheet
));
2863 CPPUNIT_ASSERT_EQUAL(u
"Note A2"_ustr
, getNote(3, 2, destSheet
));
2864 CPPUNIT_ASSERT_EQUAL(u
"Note A3"_ustr
, getNote(3, 3, destSheet
));
2865 CPPUNIT_ASSERT_EQUAL(u
"Note B1"_ustr
, getNote(4, 1, destSheet
));
2866 CPPUNIT_ASSERT_EQUAL(u
"Note B3"_ustr
, getNote(4, 3, destSheet
));
2867 CPPUNIT_ASSERT_EQUAL(u
"Note C2"_ustr
, getNote(5, 2, destSheet
));
2868 CPPUNIT_ASSERT_EQUAL(u
"Note C3"_ustr
, getNote(5, 3, destSheet
));
2869 CPPUNIT_ASSERT_EQUAL(u
"Note D1"_ustr
, getNote(6, 1, destSheet
));
2870 CPPUNIT_ASSERT_EQUAL(u
"Note D2"_ustr
, getNote(6, 2, destSheet
));
2871 CPPUNIT_ASSERT_EQUAL(u
"Note D3"_ustr
, getNote(6, 3, destSheet
));
2873 CPPUNIT_ASSERT_EQUAL(u
"Note E2"_ustr
, getNote(7, 3, destSheet
));
2874 CPPUNIT_ASSERT_EQUAL(u
"Note E4"_ustr
, getNote(7, 4, destSheet
));
2876 CPPUNIT_ASSERT_EQUAL(u
"Note F2"_ustr
, getNote(8, 2, destSheet
));
2877 CPPUNIT_ASSERT_EQUAL(u
"Note F4"_ustr
, getNote(8, 4, destSheet
));
2879 // Existing references to the destination range must not change
2880 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.D1"_ustr
, m_pDoc
->GetFormula(3, 101, srcSheet
));
2881 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.D2"_ustr
, m_pDoc
->GetFormula(3, 102, srcSheet
));
2882 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.D3"_ustr
, m_pDoc
->GetFormula(3, 103, srcSheet
));
2883 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.D4"_ustr
, m_pDoc
->GetFormula(3, 104, srcSheet
));
2884 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.D5"_ustr
, m_pDoc
->GetFormula(3, 105, srcSheet
));
2885 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.D6"_ustr
, m_pDoc
->GetFormula(3, 106, srcSheet
));
2886 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.D7"_ustr
, m_pDoc
->GetFormula(3, 107, srcSheet
));
2887 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.E1"_ustr
, m_pDoc
->GetFormula(4, 101, srcSheet
));
2888 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.E2"_ustr
, m_pDoc
->GetFormula(4, 102, srcSheet
));
2889 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.E3"_ustr
, m_pDoc
->GetFormula(4, 103, srcSheet
));
2890 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.E4"_ustr
, m_pDoc
->GetFormula(4, 104, srcSheet
));
2891 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.E5"_ustr
, m_pDoc
->GetFormula(4, 105, srcSheet
));
2892 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.E6"_ustr
, m_pDoc
->GetFormula(4, 106, srcSheet
));
2893 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.E7"_ustr
, m_pDoc
->GetFormula(4, 107, srcSheet
));
2894 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.F1"_ustr
, m_pDoc
->GetFormula(5, 101, srcSheet
));
2895 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.F2"_ustr
, m_pDoc
->GetFormula(5, 102, srcSheet
));
2896 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.F3"_ustr
, m_pDoc
->GetFormula(5, 103, srcSheet
));
2897 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.F4"_ustr
, m_pDoc
->GetFormula(5, 104, srcSheet
));
2898 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.F5"_ustr
, m_pDoc
->GetFormula(5, 105, srcSheet
));
2899 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.F6"_ustr
, m_pDoc
->GetFormula(5, 106, srcSheet
));
2900 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.F7"_ustr
, m_pDoc
->GetFormula(5, 107, srcSheet
));
2901 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.G1"_ustr
, m_pDoc
->GetFormula(6, 101, srcSheet
));
2902 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.G2"_ustr
, m_pDoc
->GetFormula(6, 102, srcSheet
));
2903 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.G3"_ustr
, m_pDoc
->GetFormula(6, 103, srcSheet
));
2904 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.G4"_ustr
, m_pDoc
->GetFormula(6, 104, srcSheet
));
2905 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.G5"_ustr
, m_pDoc
->GetFormula(6, 105, srcSheet
));
2906 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.G6"_ustr
, m_pDoc
->GetFormula(6, 106, srcSheet
));
2907 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.G7"_ustr
, m_pDoc
->GetFormula(6, 107, srcSheet
));
2908 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.H1"_ustr
, m_pDoc
->GetFormula(7, 101, srcSheet
));
2909 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.H2"_ustr
, m_pDoc
->GetFormula(7, 102, srcSheet
));
2910 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.H3"_ustr
, m_pDoc
->GetFormula(7, 103, srcSheet
));
2911 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.H4"_ustr
, m_pDoc
->GetFormula(7, 104, srcSheet
));
2912 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.H5"_ustr
, m_pDoc
->GetFormula(7, 105, srcSheet
));
2913 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.H6"_ustr
, m_pDoc
->GetFormula(7, 106, srcSheet
));
2914 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.H7"_ustr
, m_pDoc
->GetFormula(7, 107, srcSheet
));
2915 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.I1"_ustr
, m_pDoc
->GetFormula(8, 101, srcSheet
));
2916 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.I2"_ustr
, m_pDoc
->GetFormula(8, 102, srcSheet
));
2917 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.I3"_ustr
, m_pDoc
->GetFormula(8, 103, srcSheet
));
2918 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.I4"_ustr
, m_pDoc
->GetFormula(8, 104, srcSheet
));
2919 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.I5"_ustr
, m_pDoc
->GetFormula(8, 105, srcSheet
));
2920 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.I6"_ustr
, m_pDoc
->GetFormula(8, 106, srcSheet
));
2921 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.I7"_ustr
, m_pDoc
->GetFormula(8, 107, srcSheet
));
2922 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.J1"_ustr
, m_pDoc
->GetFormula(9, 101, srcSheet
));
2923 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.J2"_ustr
, m_pDoc
->GetFormula(9, 102, srcSheet
));
2924 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.J3"_ustr
, m_pDoc
->GetFormula(9, 103, srcSheet
));
2925 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.J4"_ustr
, m_pDoc
->GetFormula(9, 104, srcSheet
));
2926 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.J5"_ustr
, m_pDoc
->GetFormula(9, 105, srcSheet
));
2927 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.J6"_ustr
, m_pDoc
->GetFormula(9, 106, srcSheet
));
2928 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.J7"_ustr
, m_pDoc
->GetFormula(9, 107, srcSheet
));
2930 // row 14 on src sheet, refs to copied/cut range
2933 CPPUNIT_ASSERT_EQUAL(u
"=C5"_ustr
, m_pDoc
->GetFormula(1, 16, srcSheet
));
2934 CPPUNIT_ASSERT_EQUAL(u
"=$C$5"_ustr
, m_pDoc
->GetFormula(2, 16, srcSheet
));
2935 CPPUNIT_ASSERT_EQUAL(u
"=$C5"_ustr
, m_pDoc
->GetFormula(3, 16, srcSheet
));
2936 CPPUNIT_ASSERT_EQUAL(u
"=C$5"_ustr
, m_pDoc
->GetFormula(4, 16, srcSheet
));
2937 CPPUNIT_ASSERT_EQUAL(u
"=SUM(C5:C5)"_ustr
, m_pDoc
->GetFormula(5, 16, srcSheet
));
2938 CPPUNIT_ASSERT_EQUAL(u
"=SUM($C$5:$C$5)"_ustr
, m_pDoc
->GetFormula(6, 16, srcSheet
));
2939 CPPUNIT_ASSERT_EQUAL(u
"=SUM($C5:$C5)"_ustr
, m_pDoc
->GetFormula(7, 16, srcSheet
));
2940 CPPUNIT_ASSERT_EQUAL(u
"=SUM(C$5:C$5)"_ustr
, m_pDoc
->GetFormula(8, 16, srcSheet
));
2941 CPPUNIT_ASSERT_EQUAL(u
"=SUM($B$3:$B$6)"_ustr
, m_pDoc
->GetFormula(9, 16, srcSheet
));
2942 CPPUNIT_ASSERT_EQUAL(u
"=SUM($B$3:$B$10)"_ustr
, m_pDoc
->GetFormula(10, 16, srcSheet
));
2944 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(1, 16, srcSheet
));
2945 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(2, 16, srcSheet
));
2946 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(3, 16, srcSheet
));
2947 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(4, 16, srcSheet
));
2948 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(5, 16, srcSheet
));
2949 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(6, 16, srcSheet
));
2950 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(7, 16, srcSheet
));
2951 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(8, 16, srcSheet
));
2952 CPPUNIT_ASSERT_EQUAL(10.0, m_pDoc
->GetValue(9, 16, srcSheet
));
2953 CPPUNIT_ASSERT_EQUAL(-17.0, m_pDoc
->GetValue(10, 16, srcSheet
));
2955 CPPUNIT_ASSERT_EQUAL(u
"=Range_C5"_ustr
, m_pDoc
->GetFormula(1, 17, srcSheet
));
2956 CPPUNIT_ASSERT_EQUAL(u
"=Range_aCa5"_ustr
, m_pDoc
->GetFormula(2, 17, srcSheet
));
2957 CPPUNIT_ASSERT_EQUAL(u
"=Range_aC5"_ustr
, m_pDoc
->GetFormula(3, 17, srcSheet
));
2958 CPPUNIT_ASSERT_EQUAL(u
"=Range_Ca5"_ustr
, m_pDoc
->GetFormula(4, 17, srcSheet
));
2959 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_C5_C5)"_ustr
, m_pDoc
->GetFormula(5, 17, srcSheet
));
2960 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_aCa5_aCa5)"_ustr
, m_pDoc
->GetFormula(6, 17, srcSheet
));
2961 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_aC5_aC5)"_ustr
, m_pDoc
->GetFormula(7, 17, srcSheet
));
2962 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_Ca5_Ca5)"_ustr
, m_pDoc
->GetFormula(8, 17, srcSheet
));
2963 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_aCa5_aCa8)"_ustr
, m_pDoc
->GetFormula(9, 17, srcSheet
));
2964 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_aCa5_aCa10)"_ustr
, m_pDoc
->GetFormula(10, 17, srcSheet
));
2966 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(1, 17, srcSheet
));
2967 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(2, 17, srcSheet
));
2968 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(3, 17, srcSheet
));
2969 CPPUNIT_ASSERT_EQUAL(5.0, m_pDoc
->GetValue(4, 17, srcSheet
));
2970 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(5, 17, srcSheet
));
2971 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(6, 17, srcSheet
));
2972 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(7, 17, srcSheet
));
2973 CPPUNIT_ASSERT_EQUAL(123.0, m_pDoc
->GetValue(8, 17, srcSheet
));
2974 CPPUNIT_ASSERT_EQUAL(10.0, m_pDoc
->GetValue(9, 17, srcSheet
));
2975 CPPUNIT_ASSERT_EQUAL(-17.0, m_pDoc
->GetValue(10, 17, srcSheet
));
2977 m_pDoc
->DeleteTab(destSheet
);
2978 m_pDoc
->DeleteTab(srcSheet
);
2982 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.E4"_ustr
, m_pDoc
->GetFormula(1, 16, srcSheet
));
2983 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.$E$4"_ustr
, m_pDoc
->GetFormula(2, 16, srcSheet
));
2984 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.$E4"_ustr
, m_pDoc
->GetFormula(3, 16, srcSheet
));
2985 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.E$4"_ustr
, m_pDoc
->GetFormula(4, 16, srcSheet
));
2986 CPPUNIT_ASSERT_EQUAL(u
"=SUM(DestSheet.E4:E4)"_ustr
, m_pDoc
->GetFormula(5, 16, srcSheet
));
2987 CPPUNIT_ASSERT_EQUAL(u
"=SUM(DestSheet.$E$4:$E$4)"_ustr
,
2988 m_pDoc
->GetFormula(6, 16, srcSheet
));
2989 CPPUNIT_ASSERT_EQUAL(u
"=SUM(DestSheet.$E4:$E4)"_ustr
, m_pDoc
->GetFormula(7, 16, srcSheet
));
2990 CPPUNIT_ASSERT_EQUAL(u
"=SUM(DestSheet.E$4:E$4)"_ustr
, m_pDoc
->GetFormula(8, 16, srcSheet
));
2991 CPPUNIT_ASSERT_EQUAL(u
"=SUM(DestSheet.$D$2:$D$5)"_ustr
,
2992 m_pDoc
->GetFormula(9, 16, srcSheet
));
2993 CPPUNIT_ASSERT_EQUAL(u
"=SUM($B$3:$B$10)"_ustr
, m_pDoc
->GetFormula(10, 16, srcSheet
));
2995 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(1, 16, srcSheet
));
2996 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(2, 16, srcSheet
));
2997 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(3, 16, srcSheet
));
2998 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(4, 16, srcSheet
));
2999 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(5, 16, srcSheet
));
3000 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(6, 16, srcSheet
));
3001 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(7, 16, srcSheet
));
3002 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(8, 16, srcSheet
));
3003 CPPUNIT_ASSERT_EQUAL(10.0, m_pDoc
->GetValue(9, 16, srcSheet
));
3004 CPPUNIT_ASSERT_EQUAL(-27.0, m_pDoc
->GetValue(10, 16, srcSheet
));
3006 CPPUNIT_ASSERT_EQUAL(u
"=Range_C5"_ustr
, m_pDoc
->GetFormula(1, 17, srcSheet
));
3007 CPPUNIT_ASSERT_EQUAL(u
"=Range_aCa5"_ustr
, m_pDoc
->GetFormula(2, 17, srcSheet
));
3008 CPPUNIT_ASSERT_EQUAL(u
"=Range_aC5"_ustr
, m_pDoc
->GetFormula(3, 17, srcSheet
));
3009 CPPUNIT_ASSERT_EQUAL(u
"=Range_Ca5"_ustr
, m_pDoc
->GetFormula(4, 17, srcSheet
));
3010 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_C5_C5)"_ustr
, m_pDoc
->GetFormula(5, 17, srcSheet
));
3011 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_aCa5_aCa5)"_ustr
, m_pDoc
->GetFormula(6, 17, srcSheet
));
3012 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_aC5_aC5)"_ustr
, m_pDoc
->GetFormula(7, 17, srcSheet
));
3013 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_Ca5_Ca5)"_ustr
, m_pDoc
->GetFormula(8, 17, srcSheet
));
3014 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_aCa5_aCa8)"_ustr
, m_pDoc
->GetFormula(9, 17, srcSheet
));
3015 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_aCa5_aCa10)"_ustr
, m_pDoc
->GetFormula(10, 17, srcSheet
));
3017 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(1, 17, srcSheet
));
3018 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(2, 17, srcSheet
));
3019 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(3, 17, srcSheet
));
3020 CPPUNIT_ASSERT_EQUAL(0.0, m_pDoc
->GetValue(4, 17, srcSheet
));
3021 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(5, 17, srcSheet
));
3022 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(6, 17, srcSheet
));
3023 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(7, 17, srcSheet
));
3024 CPPUNIT_ASSERT_EQUAL(123.0, m_pDoc
->GetValue(8, 17, srcSheet
));
3025 CPPUNIT_ASSERT_EQUAL(10.0, m_pDoc
->GetValue(9, 17, srcSheet
));
3026 CPPUNIT_ASSERT_EQUAL(-27.0, m_pDoc
->GetValue(10, 17, srcSheet
));
3030 void TestCopyPaste::checkCopyPasteSpecialFiltered(bool bSkipEmpty
)
3032 const SCTAB srcSheet
= 0;
3033 const SCTAB destSheet
= 1;
3036 | D | E | F | G | H | I |
3038 2 | 1 B*| =D2+10 *| a | R1 *| =D2+D4+60 | =SUMIF(D2:D5;"<4") |
3039 3 | 3 B*| =G3+30 b*| c *| 5 *| B*| |
3040 4 | 4 | =D2+40 b*| d *| R4 *| =D1+D3+70 *| =E$3+$B$5+80 *|
3041 5 | 1 B*| =D5+10 *| a | R1 *| =D5+D7+60 | =SUMIF(D5:D8;"<4") | <- repeated row
3043 * means note attached
3048 const EditTextObject
* pEditObj
;
3051 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(2, 0, destSheet
));
3052 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(2, 1, destSheet
));
3053 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(2, 2, destSheet
));
3054 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(2, 3, destSheet
));
3055 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(2, 4, destSheet
));
3056 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(2, 5, destSheet
));
3058 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(3, 0, destSheet
));
3059 CPPUNIT_ASSERT_EQUAL(1.0, m_pDoc
->GetValue(3, 1, destSheet
));
3060 CPPUNIT_ASSERT_EQUAL(3.0, m_pDoc
->GetValue(3, 2, destSheet
));
3061 CPPUNIT_ASSERT_EQUAL(4.0, m_pDoc
->GetValue(3, 3, destSheet
));
3062 CPPUNIT_ASSERT_EQUAL(1.0, m_pDoc
->GetValue(3, 4, destSheet
)); // repeated row 1
3063 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(3, 5, destSheet
));
3065 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(4, 0, destSheet
));
3066 CPPUNIT_ASSERT_EQUAL(OUString(), m_pDoc
->GetFormula(4, 0, destSheet
));
3067 CPPUNIT_ASSERT_EQUAL(11.0, m_pDoc
->GetValue(4, 1, destSheet
));
3068 CPPUNIT_ASSERT_EQUAL(u
"=D2+10"_ustr
, m_pDoc
->GetFormula(4, 1, destSheet
));
3069 CPPUNIT_ASSERT_EQUAL(u
"=G3+30"_ustr
, m_pDoc
->GetFormula(4, 2, destSheet
));
3070 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(4, 2, destSheet
));
3071 CPPUNIT_ASSERT_EQUAL(u
"=D2+40"_ustr
, m_pDoc
->GetFormula(4, 3, destSheet
));
3072 CPPUNIT_ASSERT_EQUAL(41.0, m_pDoc
->GetValue(4, 3, destSheet
));
3073 CPPUNIT_ASSERT_EQUAL(11.0, m_pDoc
->GetValue(4, 4, destSheet
)); // repeated row 1
3074 CPPUNIT_ASSERT_EQUAL(u
"=D5+10"_ustr
, m_pDoc
->GetFormula(4, 4, destSheet
));
3075 CPPUNIT_ASSERT_EQUAL(11.0, m_pDoc
->GetValue(4, 4, destSheet
));
3076 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(4, 5, destSheet
));
3078 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(5, 0, destSheet
));
3079 CPPUNIT_ASSERT_EQUAL(u
"a"_ustr
, m_pDoc
->GetString(5, 1, destSheet
));
3080 CPPUNIT_ASSERT_EQUAL(u
"c"_ustr
, m_pDoc
->GetString(5, 2, destSheet
));
3081 CPPUNIT_ASSERT_EQUAL(u
"d"_ustr
, m_pDoc
->GetString(5, 3, destSheet
));
3082 CPPUNIT_ASSERT_EQUAL(u
"a"_ustr
, m_pDoc
->GetString(5, 4, destSheet
)); // repeated row 1
3083 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(5, 5, destSheet
));
3084 CPPUNIT_ASSERT_EQUAL(OUString(), m_pDoc
->GetFormula(4, 5, destSheet
));
3086 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(6, 0, destSheet
));
3087 pEditObj
= m_pDoc
->GetEditText(ScAddress(6, 0, destSheet
));
3088 CPPUNIT_ASSERT(pEditObj
== nullptr);
3089 pEditObj
= m_pDoc
->GetEditText(ScAddress(6, 1, destSheet
));
3090 CPPUNIT_ASSERT(pEditObj
);
3091 CPPUNIT_ASSERT_EQUAL(u
"R1"_ustr
, pEditObj
->GetText(0));
3092 CPPUNIT_ASSERT_EQUAL(5.0, m_pDoc
->GetValue(6, 2, destSheet
));
3093 pEditObj
= m_pDoc
->GetEditText(ScAddress(6, 3, destSheet
));
3094 CPPUNIT_ASSERT(pEditObj
);
3095 CPPUNIT_ASSERT_EQUAL(u
"R4"_ustr
, pEditObj
->GetText(0));
3096 pEditObj
= m_pDoc
->GetEditText(ScAddress(6, 4, destSheet
)); // repeated row 1
3097 CPPUNIT_ASSERT(pEditObj
);
3098 CPPUNIT_ASSERT_EQUAL(u
"R1"_ustr
, pEditObj
->GetText(0));
3099 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(6, 5, destSheet
));
3100 pEditObj
= m_pDoc
->GetEditText(ScAddress(6, 5, destSheet
));
3101 CPPUNIT_ASSERT(pEditObj
== nullptr);
3103 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(7, 0, destSheet
));
3104 CPPUNIT_ASSERT_EQUAL(u
"1000"_ustr
, m_pDoc
->GetString(7, 0, destSheet
));
3105 CPPUNIT_ASSERT_EQUAL(u
"=D2+D4+60"_ustr
, m_pDoc
->GetFormula(7, 1, destSheet
));
3106 // formula is not adjusted due to filter row
3107 CPPUNIT_ASSERT_EQUAL(65.0, m_pDoc
->GetValue(7, 1, destSheet
));
3109 CPPUNIT_ASSERT_EQUAL(OUString(), m_pDoc
->GetString(7, 2, destSheet
));
3111 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(7, 2, destSheet
));
3112 CPPUNIT_ASSERT_EQUAL(u
"=D1+D3+70"_ustr
, m_pDoc
->GetFormula(7, 3, destSheet
));
3113 CPPUNIT_ASSERT_EQUAL(1073.0, m_pDoc
->GetValue(7, 3, destSheet
));
3114 CPPUNIT_ASSERT_EQUAL(u
"=D5+D7+60"_ustr
, m_pDoc
->GetFormula(7, 4, destSheet
)); // repeated row 1
3115 // formula is not adjusted due to filter row
3116 CPPUNIT_ASSERT_EQUAL(1061.0, m_pDoc
->GetValue(7, 4, destSheet
));
3117 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(7, 5, destSheet
));
3118 CPPUNIT_ASSERT_EQUAL(u
"1000"_ustr
, m_pDoc
->GetString(7, 5, destSheet
));
3120 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(8, 0, destSheet
));
3121 CPPUNIT_ASSERT_EQUAL(u
"1000"_ustr
, m_pDoc
->GetString(8, 0, destSheet
));
3122 CPPUNIT_ASSERT_EQUAL(u
"=SUMIF(D2:D5;\"<4\")"_ustr
, m_pDoc
->GetFormula(8, 1, destSheet
));
3123 CPPUNIT_ASSERT_EQUAL(5.0, m_pDoc
->GetValue(8, 1, destSheet
));
3125 CPPUNIT_ASSERT_EQUAL(OUString(), m_pDoc
->GetString(8, 2, destSheet
));
3127 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(8, 2, destSheet
));
3128 CPPUNIT_ASSERT_EQUAL(1115.0, m_pDoc
->GetValue(8, 3, destSheet
));
3129 CPPUNIT_ASSERT_EQUAL(u
"=E$3+$B$5+80"_ustr
, m_pDoc
->GetFormula(8, 3, destSheet
));
3130 CPPUNIT_ASSERT_EQUAL(u
"=SUMIF(D5:D8;\"<4\")"_ustr
, m_pDoc
->GetFormula(8, 4, destSheet
));
3131 CPPUNIT_ASSERT_EQUAL(1.0, m_pDoc
->GetValue(8, 4, destSheet
));
3132 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(8, 5, destSheet
));
3133 CPPUNIT_ASSERT_EQUAL(u
"1000"_ustr
, m_pDoc
->GetString(8, 5, destSheet
));
3135 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(9, 0, destSheet
));
3136 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(9, 1, destSheet
));
3137 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(9, 2, destSheet
));
3138 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(9, 3, destSheet
));
3139 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(9, 4, destSheet
));
3140 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(9, 5, destSheet
));
3143 const SfxPoolItem
* pItem
= nullptr;
3144 m_pDoc
->GetPattern(ScAddress(3, 1, destSheet
))->GetItemSet().HasItem(ATTR_BACKGROUND
, &pItem
);
3145 CPPUNIT_ASSERT(pItem
);
3146 CPPUNIT_ASSERT_EQUAL(COL_BLUE
, static_cast<const SvxBrushItem
*>(pItem
)->GetColor());
3147 m_pDoc
->GetPattern(ScAddress(3, 2, destSheet
))->GetItemSet().HasItem(ATTR_BACKGROUND
, &pItem
);
3148 CPPUNIT_ASSERT(pItem
);
3149 CPPUNIT_ASSERT_EQUAL(COL_BLUE
, static_cast<const SvxBrushItem
*>(pItem
)->GetColor());
3150 m_pDoc
->GetPattern(ScAddress(3, 3, destSheet
))->GetItemSet().HasItem(ATTR_BACKGROUND
, &pItem
);
3151 CPPUNIT_ASSERT(!pItem
);
3152 m_pDoc
->GetPattern(ScAddress(3, 4, destSheet
))->GetItemSet().HasItem(ATTR_BACKGROUND
, &pItem
);
3153 CPPUNIT_ASSERT(pItem
);
3154 CPPUNIT_ASSERT_EQUAL(COL_BLUE
, static_cast<const SvxBrushItem
*>(pItem
)->GetColor());
3155 m_pDoc
->GetPattern(ScAddress(3, 5, destSheet
))->GetItemSet().HasItem(ATTR_BACKGROUND
, &pItem
);
3156 CPPUNIT_ASSERT(!pItem
);
3157 m_pDoc
->GetPattern(ScAddress(7, 2, destSheet
))->GetItemSet().HasItem(ATTR_BACKGROUND
, &pItem
);
3158 CPPUNIT_ASSERT_EQUAL(bSkipEmpty
, pItem
== nullptr);
3160 CPPUNIT_ASSERT_EQUAL(COL_GREEN
, static_cast<const SvxBrushItem
*>(pItem
)->GetColor());
3162 // check border, left and right borders were transformed to top and bottom borders
3163 pItem
= m_pDoc
->GetAttr(ScAddress(4, 1, destSheet
), ATTR_BORDER
);
3164 CPPUNIT_ASSERT(pItem
);
3165 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetTop());
3166 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetBottom());
3167 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetLeft());
3168 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetRight());
3169 pItem
= m_pDoc
->GetAttr(ScAddress(4, 2, destSheet
), ATTR_BORDER
);
3170 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetTop());
3171 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetBottom());
3172 CPPUNIT_ASSERT(static_cast<const SvxBoxItem
*>(pItem
)->GetLeft());
3173 CPPUNIT_ASSERT(static_cast<const SvxBoxItem
*>(pItem
)->GetRight());
3174 pItem
= m_pDoc
->GetAttr(ScAddress(4, 3, destSheet
), ATTR_BORDER
);
3175 CPPUNIT_ASSERT(pItem
);
3176 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetTop());
3177 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetBottom());
3178 CPPUNIT_ASSERT(static_cast<const SvxBoxItem
*>(pItem
)->GetLeft());
3179 CPPUNIT_ASSERT(static_cast<const SvxBoxItem
*>(pItem
)->GetRight());
3180 pItem
= m_pDoc
->GetAttr(ScAddress(4, 4, destSheet
), ATTR_BORDER
);
3181 CPPUNIT_ASSERT(pItem
);
3182 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetTop());
3183 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetBottom());
3184 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetLeft());
3185 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetRight());
3187 // check notes after transposed copy/paste
3188 // check presence of notes
3189 CPPUNIT_ASSERT(!m_pDoc
->HasNote(2, 0, destSheet
));
3190 CPPUNIT_ASSERT(!m_pDoc
->HasNote(3, 0, destSheet
));
3191 CPPUNIT_ASSERT(!m_pDoc
->HasNote(4, 0, destSheet
));
3192 CPPUNIT_ASSERT(!m_pDoc
->HasNote(5, 0, destSheet
));
3193 CPPUNIT_ASSERT(!m_pDoc
->HasNote(6, 0, destSheet
));
3194 CPPUNIT_ASSERT(!m_pDoc
->HasNote(7, 0, destSheet
));
3195 CPPUNIT_ASSERT(!m_pDoc
->HasNote(8, 0, destSheet
));
3196 CPPUNIT_ASSERT(!m_pDoc
->HasNote(9, 0, destSheet
));
3197 CPPUNIT_ASSERT(!m_pDoc
->HasNote(2, 1, destSheet
));
3198 CPPUNIT_ASSERT(m_pDoc
->HasNote(3, 1, destSheet
));
3199 CPPUNIT_ASSERT(m_pDoc
->HasNote(4, 1, destSheet
));
3200 CPPUNIT_ASSERT(!m_pDoc
->HasNote(5, 1, destSheet
));
3201 CPPUNIT_ASSERT(m_pDoc
->HasNote(6, 1, destSheet
));
3202 CPPUNIT_ASSERT(!m_pDoc
->HasNote(7, 1, destSheet
));
3203 CPPUNIT_ASSERT(!m_pDoc
->HasNote(8, 1, destSheet
));
3204 CPPUNIT_ASSERT(!m_pDoc
->HasNote(9, 1, destSheet
));
3205 CPPUNIT_ASSERT(!m_pDoc
->HasNote(2, 2, destSheet
));
3206 CPPUNIT_ASSERT(m_pDoc
->HasNote(3, 2, destSheet
));
3207 CPPUNIT_ASSERT(m_pDoc
->HasNote(4, 2, destSheet
));
3208 CPPUNIT_ASSERT(m_pDoc
->HasNote(5, 2, destSheet
));
3209 CPPUNIT_ASSERT(m_pDoc
->HasNote(6, 2, destSheet
));
3210 CPPUNIT_ASSERT_EQUAL(!bSkipEmpty
, m_pDoc
->HasNote(7, 2, destSheet
));
3211 CPPUNIT_ASSERT(!m_pDoc
->HasNote(8, 2, destSheet
));
3212 CPPUNIT_ASSERT(!m_pDoc
->HasNote(9, 2, destSheet
));
3213 CPPUNIT_ASSERT(!m_pDoc
->HasNote(2, 3, destSheet
));
3214 CPPUNIT_ASSERT(!m_pDoc
->HasNote(3, 3, destSheet
));
3215 CPPUNIT_ASSERT(m_pDoc
->HasNote(4, 3, destSheet
));
3216 CPPUNIT_ASSERT(m_pDoc
->HasNote(5, 3, destSheet
));
3217 CPPUNIT_ASSERT(m_pDoc
->HasNote(6, 3, destSheet
));
3218 CPPUNIT_ASSERT(m_pDoc
->HasNote(7, 3, destSheet
));
3219 CPPUNIT_ASSERT(m_pDoc
->HasNote(8, 3, destSheet
));
3220 CPPUNIT_ASSERT(!m_pDoc
->HasNote(9, 3, destSheet
));
3221 CPPUNIT_ASSERT(!m_pDoc
->HasNote(2, 4, destSheet
));
3222 CPPUNIT_ASSERT(m_pDoc
->HasNote(3, 4, destSheet
));
3223 CPPUNIT_ASSERT(m_pDoc
->HasNote(4, 4, destSheet
));
3224 CPPUNIT_ASSERT(!m_pDoc
->HasNote(5, 4, destSheet
));
3225 CPPUNIT_ASSERT(m_pDoc
->HasNote(6, 4, destSheet
));
3226 CPPUNIT_ASSERT(!m_pDoc
->HasNote(7, 4, destSheet
));
3227 CPPUNIT_ASSERT(!m_pDoc
->HasNote(8, 4, destSheet
));
3228 CPPUNIT_ASSERT(!m_pDoc
->HasNote(9, 4, destSheet
));
3229 CPPUNIT_ASSERT(!m_pDoc
->HasNote(2, 5, destSheet
));
3230 CPPUNIT_ASSERT(!m_pDoc
->HasNote(3, 5, destSheet
));
3231 CPPUNIT_ASSERT(!m_pDoc
->HasNote(4, 5, destSheet
));
3232 CPPUNIT_ASSERT(!m_pDoc
->HasNote(5, 5, destSheet
));
3233 CPPUNIT_ASSERT(!m_pDoc
->HasNote(6, 5, destSheet
));
3234 CPPUNIT_ASSERT(!m_pDoc
->HasNote(7, 5, destSheet
));
3235 CPPUNIT_ASSERT(!m_pDoc
->HasNote(8, 5, destSheet
));
3236 CPPUNIT_ASSERT(!m_pDoc
->HasNote(9, 5, destSheet
));
3238 // check values of notes
3239 CPPUNIT_ASSERT_EQUAL(u
"Note A1"_ustr
, getNote(3, 1, destSheet
));
3240 CPPUNIT_ASSERT_EQUAL(u
"Note A3"_ustr
, getNote(3, 2, destSheet
));
3241 CPPUNIT_ASSERT_EQUAL(u
"Note B1"_ustr
, getNote(4, 1, destSheet
));
3242 CPPUNIT_ASSERT_EQUAL(u
"Note B3"_ustr
, getNote(4, 2, destSheet
));
3243 CPPUNIT_ASSERT_EQUAL(u
"Note C3"_ustr
, getNote(5, 2, destSheet
));
3244 CPPUNIT_ASSERT_EQUAL(u
"Note D1"_ustr
, getNote(6, 1, destSheet
));
3245 CPPUNIT_ASSERT_EQUAL(u
"Note D3"_ustr
, getNote(6, 2, destSheet
));
3247 CPPUNIT_ASSERT_EQUAL(u
"Note E2"_ustr
, getNote(7, 2, destSheet
));
3248 CPPUNIT_ASSERT_EQUAL(u
"Note E4"_ustr
, getNote(7, 3, destSheet
));
3249 CPPUNIT_ASSERT_EQUAL(u
"Note F4"_ustr
, getNote(8, 3, destSheet
));
3251 m_pDoc
->DeleteTab(destSheet
);
3252 m_pDoc
->DeleteTab(srcSheet
);
3255 void TestCopyPaste::checkCopyPasteSpecialTranspose(bool bSkipEmpty
, bool bCut
)
3257 const SCTAB srcSheet
= 0;
3258 const SCTAB destSheet
= 1;
3263 2 | 1 B*| 2 B*| 3 B*| 4 |
3264 3 | =D2+10 *| =E2+20 b | =F5+30 b*| =E2+40 b*|
3265 4 | a | b *| c *| d *|
3266 5 | R1 *| R2 *| 5 *| R4 *|
3267 6 | =D2+F2+60 | | B*| =D2+F2+70 *|
3268 7 | =SUMIF(D2:G2;"<4") | *| | =C$3+$B$5+80 *|
3270 * means note attached
3275 //check cell content after transposed copy/paste of filtered data
3276 // Note: column F is a repetition of srcSheet.Column A
3277 // Col C and G are checked to be empty
3278 const EditTextObject
* pEditObj
;
3280 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(2, 0, destSheet
));
3281 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(3, 0, destSheet
));
3282 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(4, 0, destSheet
));
3283 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(5, 0, destSheet
));
3284 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(6, 0, destSheet
));
3285 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(7, 0, destSheet
));
3287 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(2, 1, destSheet
));
3288 CPPUNIT_ASSERT_EQUAL_MESSAGE("transposed cell D2", 1.0, m_pDoc
->GetValue(3, 1, destSheet
));
3289 CPPUNIT_ASSERT_EQUAL_MESSAGE("transposed cell E2", 2.0, m_pDoc
->GetValue(4, 1, destSheet
));
3290 CPPUNIT_ASSERT_EQUAL_MESSAGE("transposed cell F2", 3.0, m_pDoc
->GetValue(5, 1, destSheet
));
3291 CPPUNIT_ASSERT_EQUAL_MESSAGE("transposed cell G2", 4.0, m_pDoc
->GetValue(6, 1, destSheet
));
3292 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(7, 1, destSheet
));
3294 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(2, 2, destSheet
));
3295 CPPUNIT_ASSERT_EQUAL(u
"1000"_ustr
, m_pDoc
->GetString(2, 2, destSheet
));
3296 CPPUNIT_ASSERT_EQUAL_MESSAGE("transposed D3", u
"=D2+10"_ustr
,
3297 m_pDoc
->GetFormula(3, 2, destSheet
));
3298 CPPUNIT_ASSERT_EQUAL_MESSAGE("transposed D3", 11.0, m_pDoc
->GetValue(3, 2, destSheet
));
3299 CPPUNIT_ASSERT_EQUAL_MESSAGE("transposed E3", u
"=E2+20"_ustr
,
3300 m_pDoc
->GetFormula(4, 2, destSheet
));
3301 CPPUNIT_ASSERT_EQUAL_MESSAGE("transposed E3", 22.0, m_pDoc
->GetValue(4, 2, destSheet
));
3302 CPPUNIT_ASSERT_EQUAL_MESSAGE("transposed F3", u
"=F5+30"_ustr
,
3303 m_pDoc
->GetFormula(5, 2, destSheet
));
3304 CPPUNIT_ASSERT_EQUAL_MESSAGE("transposed F3", 35.0, m_pDoc
->GetValue(5, 2, destSheet
));
3305 CPPUNIT_ASSERT_EQUAL_MESSAGE("transposed G3", u
"=E2+40"_ustr
,
3306 m_pDoc
->GetFormula(6, 2, destSheet
));
3307 CPPUNIT_ASSERT_EQUAL_MESSAGE("transposed G3", 42.0, m_pDoc
->GetValue(6, 2, destSheet
));
3308 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(7, 2, destSheet
));
3309 CPPUNIT_ASSERT_EQUAL(u
"1000"_ustr
, m_pDoc
->GetString(7, 2, destSheet
));
3311 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(2, 3, destSheet
));
3312 CPPUNIT_ASSERT_EQUAL(u
"1000"_ustr
, m_pDoc
->GetString(2, 3, destSheet
));
3313 CPPUNIT_ASSERT_EQUAL_MESSAGE("Cell D4", u
"a"_ustr
, m_pDoc
->GetString(3, 3, destSheet
));
3314 CPPUNIT_ASSERT_EQUAL_MESSAGE("Cell E4", u
"b"_ustr
, m_pDoc
->GetString(4, 3, destSheet
));
3315 CPPUNIT_ASSERT_EQUAL_MESSAGE("Cell F4", u
"c"_ustr
, m_pDoc
->GetString(5, 3, destSheet
));
3316 CPPUNIT_ASSERT_EQUAL_MESSAGE("Cell G4", u
"d"_ustr
, m_pDoc
->GetString(6, 3, destSheet
));
3317 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(7, 3, destSheet
));
3318 CPPUNIT_ASSERT_EQUAL(u
"1000"_ustr
, m_pDoc
->GetString(7, 3, destSheet
));
3320 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(2, 4, destSheet
));
3321 pEditObj
= m_pDoc
->GetEditText(ScAddress(2, 4, destSheet
));
3322 CPPUNIT_ASSERT_MESSAGE("There should be no edit cell in C5.", pEditObj
== nullptr);
3323 pEditObj
= m_pDoc
->GetEditText(ScAddress(3, 4, destSheet
));
3324 CPPUNIT_ASSERT_MESSAGE("There should be an edit cell in D5.", pEditObj
);
3325 CPPUNIT_ASSERT_EQUAL_MESSAGE("Edit cell value wrong in D5 ", u
"R1"_ustr
, pEditObj
->GetText(0));
3326 pEditObj
= m_pDoc
->GetEditText(ScAddress(4, 4, destSheet
));
3327 CPPUNIT_ASSERT_MESSAGE("There should be an edit cell in E5.", pEditObj
);
3328 CPPUNIT_ASSERT_EQUAL_MESSAGE("Edit cell value wrong E5.", u
"R2"_ustr
, pEditObj
->GetText(0));
3329 CPPUNIT_ASSERT_EQUAL_MESSAGE("transposed cell F5", 5.0, m_pDoc
->GetValue(5, 4, destSheet
));
3330 pEditObj
= m_pDoc
->GetEditText(ScAddress(6, 4, destSheet
));
3331 CPPUNIT_ASSERT_MESSAGE("There should be an edit cell in G5.", pEditObj
);
3332 CPPUNIT_ASSERT_EQUAL_MESSAGE("Edit cell value wrong G5.", u
"R4"_ustr
, pEditObj
->GetText(0));
3333 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(7, 4, destSheet
));
3334 pEditObj
= m_pDoc
->GetEditText(ScAddress(7, 4, destSheet
));
3335 CPPUNIT_ASSERT_MESSAGE("There should be no edit cell in H5.", pEditObj
== nullptr);
3337 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(2, 5, destSheet
));
3338 CPPUNIT_ASSERT_EQUAL(u
"1000"_ustr
, m_pDoc
->GetString(2, 5, destSheet
));
3339 CPPUNIT_ASSERT_EQUAL_MESSAGE("transposed D6", u
"=D2+F2+60"_ustr
,
3340 m_pDoc
->GetFormula(3, 5, destSheet
));
3341 CPPUNIT_ASSERT_EQUAL_MESSAGE("transposed D6", 64.0, m_pDoc
->GetValue(3, 5, destSheet
));
3344 CPPUNIT_ASSERT_EQUAL_MESSAGE("Cell E6", OUString(), m_pDoc
->GetString(4, 5, destSheet
));
3345 CPPUNIT_ASSERT_EQUAL_MESSAGE("Cell E6", OUString(), m_pDoc
->GetString(5, 5, destSheet
));
3349 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(4, 5, destSheet
));
3350 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(5, 5, destSheet
));
3352 CPPUNIT_ASSERT_EQUAL_MESSAGE("transposed G6", u
"=D2+F2+70"_ustr
,
3353 m_pDoc
->GetFormula(6, 5, destSheet
));
3354 CPPUNIT_ASSERT_EQUAL_MESSAGE("transposed G6", 74.0, m_pDoc
->GetValue(6, 5, destSheet
));
3355 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(7, 5, destSheet
));
3356 CPPUNIT_ASSERT_EQUAL(u
"1000"_ustr
, m_pDoc
->GetString(7, 5, destSheet
));
3358 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(2, 6, destSheet
));
3359 CPPUNIT_ASSERT_EQUAL(u
"1000"_ustr
, m_pDoc
->GetString(2, 6, destSheet
));
3360 CPPUNIT_ASSERT_EQUAL_MESSAGE("transposed D7", u
"=SUMIF(D2:G2;\"<4\")"_ustr
,
3361 m_pDoc
->GetFormula(3, 6, destSheet
));
3362 CPPUNIT_ASSERT_EQUAL_MESSAGE("transposed D7", 6.0, m_pDoc
->GetValue(3, 6, destSheet
));
3365 CPPUNIT_ASSERT_EQUAL_MESSAGE("Cell E6", OUString(), m_pDoc
->GetString(4, 6, destSheet
));
3366 CPPUNIT_ASSERT_EQUAL_MESSAGE("Cell E6", OUString(), m_pDoc
->GetString(5, 6, destSheet
));
3370 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(4, 6, destSheet
));
3371 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(5, 6, destSheet
));
3373 double fValue
= m_pDoc
->GetValue(6, 6, destSheet
); // G7
3374 OUString aStr
= m_pDoc
->GetFormula(6, 6, destSheet
); // G7
3377 CPPUNIT_ASSERT_EQUAL_MESSAGE("transposed G7", u
"=C$3+$B$5+80"_ustr
, aStr
);
3378 CPPUNIT_ASSERT_EQUAL_MESSAGE("transposed G7", 2080.0, fValue
);
3382 CPPUNIT_ASSERT_EQUAL(u
"=D$3+$F$2+80"_ustr
, aStr
);
3383 CPPUNIT_ASSERT_EQUAL(94.0, fValue
);
3385 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(7, 6, destSheet
));
3386 CPPUNIT_ASSERT_EQUAL(u
"1000"_ustr
, m_pDoc
->GetString(7, 6, destSheet
));
3388 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(2, 7, destSheet
));
3389 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(3, 7, destSheet
));
3390 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(4, 7, destSheet
));
3391 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(5, 7, destSheet
));
3392 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(6, 7, destSheet
));
3393 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(7, 7, destSheet
));
3396 const SfxPoolItem
* pItem
= nullptr;
3397 m_pDoc
->GetPattern(ScAddress(3, 1, destSheet
))->GetItemSet().HasItem(ATTR_BACKGROUND
, &pItem
);
3398 CPPUNIT_ASSERT_MESSAGE("D2 has a pattern", pItem
);
3399 CPPUNIT_ASSERT_EQUAL_MESSAGE("D2 has blue background", COL_BLUE
,
3400 static_cast<const SvxBrushItem
*>(pItem
)->GetColor());
3401 m_pDoc
->GetPattern(ScAddress(4, 1, destSheet
))->GetItemSet().HasItem(ATTR_BACKGROUND
, &pItem
);
3402 CPPUNIT_ASSERT_MESSAGE("E2 has a pattern", pItem
);
3403 CPPUNIT_ASSERT_EQUAL_MESSAGE("E2 has blue background", COL_BLUE
,
3404 static_cast<const SvxBrushItem
*>(pItem
)->GetColor());
3405 m_pDoc
->GetPattern(ScAddress(5, 1, destSheet
))->GetItemSet().HasItem(ATTR_BACKGROUND
, &pItem
);
3406 CPPUNIT_ASSERT_MESSAGE("F2 has a pattern", pItem
);
3407 CPPUNIT_ASSERT_EQUAL_MESSAGE("F2 has a pattern", COL_BLUE
,
3408 static_cast<const SvxBrushItem
*>(pItem
)->GetColor());
3409 m_pDoc
->GetPattern(ScAddress(6, 1, destSheet
))->GetItemSet().HasItem(ATTR_BACKGROUND
, &pItem
);
3410 CPPUNIT_ASSERT_MESSAGE("G2 has no pattern", !pItem
);
3411 m_pDoc
->GetPattern(ScAddress(7, 1, destSheet
))->GetItemSet().HasItem(ATTR_BACKGROUND
, &pItem
);
3412 CPPUNIT_ASSERT_MESSAGE("H2 has no pattern", !pItem
);
3413 m_pDoc
->GetPattern(ScAddress(5, 5, destSheet
))->GetItemSet().HasItem(ATTR_BACKGROUND
, &pItem
);
3414 CPPUNIT_ASSERT_EQUAL(bSkipEmpty
, pItem
== nullptr);
3416 CPPUNIT_ASSERT_EQUAL(COL_GREEN
, static_cast<const SvxBrushItem
*>(pItem
)->GetColor());
3418 // check border, left and right borders were transformed to top and bottom borders
3419 pItem
= m_pDoc
->GetAttr(ScAddress(3, 2, destSheet
), ATTR_BORDER
);
3420 CPPUNIT_ASSERT_MESSAGE("D3 has a border", pItem
);
3421 CPPUNIT_ASSERT_MESSAGE("D3 has no top border",
3422 !static_cast<const SvxBoxItem
*>(pItem
)->GetTop());
3423 CPPUNIT_ASSERT_MESSAGE("D3 has no bottom border",
3424 !static_cast<const SvxBoxItem
*>(pItem
)->GetBottom());
3425 CPPUNIT_ASSERT_MESSAGE("D3 has no left border",
3426 !static_cast<const SvxBoxItem
*>(pItem
)->GetLeft());
3427 CPPUNIT_ASSERT_MESSAGE("D3 has no right border",
3428 !static_cast<const SvxBoxItem
*>(pItem
)->GetRight());
3430 m_pDoc
->GetPattern(ScAddress(4, 2, destSheet
))->GetItemSet().HasItem(ATTR_BORDER
, &pItem
);
3431 CPPUNIT_ASSERT_MESSAGE("E3 has a border", pItem
);
3432 CPPUNIT_ASSERT_MESSAGE("E3 has top border", static_cast<const SvxBoxItem
*>(pItem
)->GetTop());
3434 pItem
= m_pDoc
->GetAttr(ScAddress(4, 2, destSheet
), ATTR_BORDER
);
3435 CPPUNIT_ASSERT_MESSAGE("E3 has a border", pItem
);
3436 CPPUNIT_ASSERT_MESSAGE("E3 has top border", static_cast<const SvxBoxItem
*>(pItem
)->GetTop());
3438 CPPUNIT_ASSERT_MESSAGE("E3 has bottom border",
3439 static_cast<const SvxBoxItem
*>(pItem
)->GetBottom());
3440 CPPUNIT_ASSERT_MESSAGE("E3 has no left border",
3441 !static_cast<const SvxBoxItem
*>(pItem
)->GetLeft());
3442 CPPUNIT_ASSERT_MESSAGE("E3 has no right border",
3443 !static_cast<const SvxBoxItem
*>(pItem
)->GetRight());
3444 pItem
= m_pDoc
->GetAttr(ScAddress(5, 2, destSheet
), ATTR_BORDER
);
3445 CPPUNIT_ASSERT_MESSAGE("F3 has a border", pItem
);
3446 CPPUNIT_ASSERT_MESSAGE("F3 has top border", static_cast<const SvxBoxItem
*>(pItem
)->GetTop());
3447 CPPUNIT_ASSERT_MESSAGE("F3 has bottom border",
3448 static_cast<const SvxBoxItem
*>(pItem
)->GetBottom());
3449 CPPUNIT_ASSERT_MESSAGE("F3 has no left border",
3450 !static_cast<const SvxBoxItem
*>(pItem
)->GetLeft());
3451 CPPUNIT_ASSERT_MESSAGE("F3 has no right border",
3452 !static_cast<const SvxBoxItem
*>(pItem
)->GetRight());
3453 pItem
= m_pDoc
->GetAttr(ScAddress(6, 2, destSheet
), ATTR_BORDER
);
3454 CPPUNIT_ASSERT_MESSAGE("G3 has top border", static_cast<const SvxBoxItem
*>(pItem
)->GetTop());
3455 CPPUNIT_ASSERT_MESSAGE("G3 has bottom border",
3456 static_cast<const SvxBoxItem
*>(pItem
)->GetBottom());
3457 CPPUNIT_ASSERT_MESSAGE("G3 has no left border",
3458 !static_cast<const SvxBoxItem
*>(pItem
)->GetLeft());
3459 CPPUNIT_ASSERT_MESSAGE("G3 has no right border",
3460 !static_cast<const SvxBoxItem
*>(pItem
)->GetRight());
3461 pItem
= m_pDoc
->GetAttr(ScAddress(7, 2, destSheet
), ATTR_BORDER
);
3462 CPPUNIT_ASSERT_MESSAGE("H3 has a border", pItem
);
3463 CPPUNIT_ASSERT_MESSAGE("H3 has no top border",
3464 !static_cast<const SvxBoxItem
*>(pItem
)->GetTop());
3465 CPPUNIT_ASSERT_MESSAGE("H3 has no bottom border",
3466 !static_cast<const SvxBoxItem
*>(pItem
)->GetBottom());
3467 CPPUNIT_ASSERT_MESSAGE("H3 has no left border",
3468 !static_cast<const SvxBoxItem
*>(pItem
)->GetLeft());
3469 CPPUNIT_ASSERT_MESSAGE("H3 has no right border",
3470 !static_cast<const SvxBoxItem
*>(pItem
)->GetRight());
3472 // check notes after transposed copy/paste
3473 // check presence of notes
3474 CPPUNIT_ASSERT_MESSAGE("C1: no note", !m_pDoc
->HasNote(2, 0, destSheet
));
3475 CPPUNIT_ASSERT_MESSAGE("D1: no note", !m_pDoc
->HasNote(3, 0, destSheet
));
3476 CPPUNIT_ASSERT_MESSAGE("E1: no note", !m_pDoc
->HasNote(4, 0, destSheet
));
3477 CPPUNIT_ASSERT_MESSAGE("F1: no note", !m_pDoc
->HasNote(5, 0, destSheet
));
3478 CPPUNIT_ASSERT_MESSAGE("G1: no note", !m_pDoc
->HasNote(6, 0, destSheet
));
3479 CPPUNIT_ASSERT_MESSAGE("H1: no note", !m_pDoc
->HasNote(7, 0, destSheet
));
3480 CPPUNIT_ASSERT_MESSAGE("C2: no note", !m_pDoc
->HasNote(2, 1, destSheet
));
3481 CPPUNIT_ASSERT_MESSAGE("D2: a note", m_pDoc
->HasNote(3, 1, destSheet
));
3482 CPPUNIT_ASSERT_MESSAGE("E2: a note", m_pDoc
->HasNote(4, 1, destSheet
));
3483 CPPUNIT_ASSERT_MESSAGE("F2: a note", m_pDoc
->HasNote(5, 1, destSheet
));
3484 CPPUNIT_ASSERT_MESSAGE("G2: no note", !m_pDoc
->HasNote(6, 1, destSheet
));
3485 CPPUNIT_ASSERT_MESSAGE("H2: no note", !m_pDoc
->HasNote(7, 1, destSheet
));
3486 CPPUNIT_ASSERT_MESSAGE("C3: no note", !m_pDoc
->HasNote(2, 2, destSheet
));
3487 CPPUNIT_ASSERT_MESSAGE("D3: a note", m_pDoc
->HasNote(3, 2, destSheet
));
3488 CPPUNIT_ASSERT_MESSAGE("E3: no note", !m_pDoc
->HasNote(4, 2, destSheet
));
3489 CPPUNIT_ASSERT_MESSAGE("F3: a note", m_pDoc
->HasNote(5, 2, destSheet
));
3490 CPPUNIT_ASSERT_MESSAGE("G3: a note", m_pDoc
->HasNote(6, 2, destSheet
));
3491 CPPUNIT_ASSERT_MESSAGE("H3: no note", !m_pDoc
->HasNote(7, 2, destSheet
));
3492 CPPUNIT_ASSERT_MESSAGE("C4: no note", !m_pDoc
->HasNote(2, 3, destSheet
));
3493 CPPUNIT_ASSERT_MESSAGE("D4: no note", !m_pDoc
->HasNote(3, 3, destSheet
));
3494 CPPUNIT_ASSERT_MESSAGE("E4: a note", m_pDoc
->HasNote(4, 3, destSheet
));
3495 CPPUNIT_ASSERT_MESSAGE("F4: a note", m_pDoc
->HasNote(5, 3, destSheet
));
3496 CPPUNIT_ASSERT_MESSAGE("G4: a note", m_pDoc
->HasNote(6, 3, destSheet
));
3497 CPPUNIT_ASSERT_MESSAGE("H4: no note", !m_pDoc
->HasNote(7, 3, destSheet
));
3498 CPPUNIT_ASSERT_MESSAGE("C5: no note", !m_pDoc
->HasNote(2, 4, destSheet
));
3499 CPPUNIT_ASSERT_MESSAGE("D5: a note", m_pDoc
->HasNote(3, 4, destSheet
));
3500 CPPUNIT_ASSERT_MESSAGE("E5: a note", m_pDoc
->HasNote(4, 4, destSheet
));
3501 CPPUNIT_ASSERT_MESSAGE("F5: a note", m_pDoc
->HasNote(5, 4, destSheet
));
3502 CPPUNIT_ASSERT_MESSAGE("G5: a note", m_pDoc
->HasNote(6, 4, destSheet
));
3503 CPPUNIT_ASSERT_MESSAGE("H5: no note", !m_pDoc
->HasNote(7, 4, destSheet
));
3504 CPPUNIT_ASSERT_MESSAGE("C6: no note", !m_pDoc
->HasNote(2, 5, destSheet
));
3505 CPPUNIT_ASSERT_MESSAGE("D6: no note", !m_pDoc
->HasNote(3, 5, destSheet
));
3506 CPPUNIT_ASSERT_MESSAGE("E6: no note", !m_pDoc
->HasNote(4, 5, destSheet
));
3507 CPPUNIT_ASSERT_EQUAL(!bSkipEmpty
, m_pDoc
->HasNote(5, 5, destSheet
));
3508 CPPUNIT_ASSERT_MESSAGE("G6: a note", m_pDoc
->HasNote(6, 5, destSheet
));
3509 CPPUNIT_ASSERT_MESSAGE("H6: no note", !m_pDoc
->HasNote(7, 5, destSheet
));
3510 CPPUNIT_ASSERT_MESSAGE("C7: no note", !m_pDoc
->HasNote(2, 6, destSheet
));
3511 CPPUNIT_ASSERT_MESSAGE("D7: no note", !m_pDoc
->HasNote(3, 6, destSheet
));
3512 CPPUNIT_ASSERT_EQUAL(!bSkipEmpty
, m_pDoc
->HasNote(4, 6, destSheet
));
3513 CPPUNIT_ASSERT_MESSAGE("F7: no note", !m_pDoc
->HasNote(5, 6, destSheet
));
3514 CPPUNIT_ASSERT_MESSAGE("G7: a note", m_pDoc
->HasNote(6, 6, destSheet
));
3515 CPPUNIT_ASSERT_MESSAGE("H7: no note", !m_pDoc
->HasNote(7, 6, destSheet
));
3516 CPPUNIT_ASSERT_MESSAGE("C8: no note", !m_pDoc
->HasNote(2, 7, destSheet
));
3517 CPPUNIT_ASSERT_MESSAGE("D8: no note", !m_pDoc
->HasNote(3, 7, destSheet
));
3518 CPPUNIT_ASSERT_MESSAGE("E8: no note", !m_pDoc
->HasNote(4, 7, destSheet
));
3519 CPPUNIT_ASSERT_MESSAGE("F8: no note", !m_pDoc
->HasNote(5, 7, destSheet
));
3520 CPPUNIT_ASSERT_MESSAGE("G8: no note", !m_pDoc
->HasNote(6, 7, destSheet
));
3521 CPPUNIT_ASSERT_MESSAGE("H8: no note", !m_pDoc
->HasNote(7, 7, destSheet
));
3523 // check values of notes
3524 CPPUNIT_ASSERT_EQUAL_MESSAGE("Cell D2", u
"Note A1"_ustr
, getNote(3, 1, destSheet
));
3525 CPPUNIT_ASSERT_EQUAL_MESSAGE("Cell E2", u
"Note A2"_ustr
, getNote(4, 1, destSheet
));
3526 CPPUNIT_ASSERT_EQUAL_MESSAGE("Cell F2", u
"Note A3"_ustr
, getNote(5, 1, destSheet
));
3528 CPPUNIT_ASSERT_EQUAL_MESSAGE("Cell D3", u
"Note B1"_ustr
, getNote(3, 2, destSheet
));
3530 CPPUNIT_ASSERT_EQUAL_MESSAGE("Cell F3", u
"Note B3"_ustr
, getNote(5, 2, destSheet
));
3532 CPPUNIT_ASSERT_EQUAL_MESSAGE("Cell E4", u
"Note C2"_ustr
, getNote(4, 3, destSheet
));
3533 CPPUNIT_ASSERT_EQUAL_MESSAGE("Cell F4", u
"Note C3"_ustr
, getNote(5, 3, destSheet
));
3534 CPPUNIT_ASSERT_EQUAL_MESSAGE("Cell D5", u
"Note D1"_ustr
, getNote(3, 4, destSheet
));
3535 CPPUNIT_ASSERT_EQUAL_MESSAGE("Cell E5", u
"Note D2"_ustr
, getNote(4, 4, destSheet
));
3536 CPPUNIT_ASSERT_EQUAL_MESSAGE("Cell F5", u
"Note D3"_ustr
, getNote(5, 4, destSheet
));
3538 CPPUNIT_ASSERT_EQUAL(u
"Note E2"_ustr
, getNote(5, 5, destSheet
));
3539 CPPUNIT_ASSERT_EQUAL_MESSAGE("Cell G6", u
"Note E4"_ustr
, getNote(6, 5, destSheet
));
3541 CPPUNIT_ASSERT_EQUAL_MESSAGE("Cell E7", u
"Note F2"_ustr
, getNote(4, 6, destSheet
));
3542 CPPUNIT_ASSERT_EQUAL_MESSAGE("Cell G7", u
"Note F4"_ustr
, getNote(6, 6, destSheet
));
3544 // row 14 on src sheet, refs to copied/cut range
3547 CPPUNIT_ASSERT_EQUAL(u
"=C5"_ustr
, m_pDoc
->GetFormula(1, 16, srcSheet
));
3548 CPPUNIT_ASSERT_EQUAL(u
"=$C$5"_ustr
, m_pDoc
->GetFormula(2, 16, srcSheet
));
3549 CPPUNIT_ASSERT_EQUAL(u
"=$C5"_ustr
, m_pDoc
->GetFormula(3, 16, srcSheet
));
3550 CPPUNIT_ASSERT_EQUAL(u
"=C$5"_ustr
, m_pDoc
->GetFormula(4, 16, srcSheet
));
3551 CPPUNIT_ASSERT_EQUAL(u
"=SUM(C5:C5)"_ustr
, m_pDoc
->GetFormula(5, 16, srcSheet
));
3552 CPPUNIT_ASSERT_EQUAL(u
"=SUM($C$5:$C$5)"_ustr
, m_pDoc
->GetFormula(6, 16, srcSheet
));
3553 CPPUNIT_ASSERT_EQUAL(u
"=SUM($C5:$C5)"_ustr
, m_pDoc
->GetFormula(7, 16, srcSheet
));
3554 CPPUNIT_ASSERT_EQUAL(u
"=SUM(C$5:C$5)"_ustr
, m_pDoc
->GetFormula(8, 16, srcSheet
));
3555 CPPUNIT_ASSERT_EQUAL(u
"=SUM($B$3:$B$6)"_ustr
, m_pDoc
->GetFormula(9, 16, srcSheet
));
3556 CPPUNIT_ASSERT_EQUAL(u
"=SUM($B$3:$B$10)"_ustr
, m_pDoc
->GetFormula(10, 16, srcSheet
));
3558 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(1, 16, srcSheet
));
3559 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(2, 16, srcSheet
));
3560 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(3, 16, srcSheet
));
3561 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(4, 16, srcSheet
));
3562 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(5, 16, srcSheet
));
3563 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(6, 16, srcSheet
));
3564 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(7, 16, srcSheet
));
3565 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(8, 16, srcSheet
));
3566 CPPUNIT_ASSERT_EQUAL(10.0, m_pDoc
->GetValue(9, 16, srcSheet
));
3567 CPPUNIT_ASSERT_EQUAL(-17.0, m_pDoc
->GetValue(10, 16, srcSheet
));
3569 CPPUNIT_ASSERT_EQUAL(u
"=Range_C5"_ustr
, m_pDoc
->GetFormula(1, 17, srcSheet
));
3570 CPPUNIT_ASSERT_EQUAL(u
"=Range_aCa5"_ustr
, m_pDoc
->GetFormula(2, 17, srcSheet
));
3571 CPPUNIT_ASSERT_EQUAL(u
"=Range_aC5"_ustr
, m_pDoc
->GetFormula(3, 17, srcSheet
));
3572 CPPUNIT_ASSERT_EQUAL(u
"=Range_Ca5"_ustr
, m_pDoc
->GetFormula(4, 17, srcSheet
));
3573 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_C5_C5)"_ustr
, m_pDoc
->GetFormula(5, 17, srcSheet
));
3574 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_aCa5_aCa5)"_ustr
, m_pDoc
->GetFormula(6, 17, srcSheet
));
3575 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_aC5_aC5)"_ustr
, m_pDoc
->GetFormula(7, 17, srcSheet
));
3576 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_Ca5_Ca5)"_ustr
, m_pDoc
->GetFormula(8, 17, srcSheet
));
3577 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_aCa5_aCa8)"_ustr
, m_pDoc
->GetFormula(9, 17, srcSheet
));
3578 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_aCa5_aCa10)"_ustr
, m_pDoc
->GetFormula(10, 17, srcSheet
));
3580 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(1, 17, srcSheet
));
3581 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(2, 17, srcSheet
));
3582 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(3, 17, srcSheet
));
3583 CPPUNIT_ASSERT_EQUAL(5.0, m_pDoc
->GetValue(4, 17, srcSheet
));
3584 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(5, 17, srcSheet
));
3585 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(6, 17, srcSheet
));
3586 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(7, 17, srcSheet
));
3587 CPPUNIT_ASSERT_EQUAL(123.0, m_pDoc
->GetValue(8, 17, srcSheet
));
3588 CPPUNIT_ASSERT_EQUAL(10.0, m_pDoc
->GetValue(9, 17, srcSheet
));
3589 CPPUNIT_ASSERT_EQUAL(-17.0, m_pDoc
->GetValue(10, 17, srcSheet
));
3591 // Existing references to the destination range must not change
3592 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.D1"_ustr
, m_pDoc
->GetFormula(3, 101, srcSheet
));
3593 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.D2"_ustr
, m_pDoc
->GetFormula(3, 102, srcSheet
));
3594 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.D3"_ustr
, m_pDoc
->GetFormula(3, 103, srcSheet
));
3595 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.D4"_ustr
, m_pDoc
->GetFormula(3, 104, srcSheet
));
3596 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.D5"_ustr
, m_pDoc
->GetFormula(3, 105, srcSheet
));
3597 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.D6"_ustr
, m_pDoc
->GetFormula(3, 106, srcSheet
));
3598 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.D7"_ustr
, m_pDoc
->GetFormula(3, 107, srcSheet
));
3599 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.E1"_ustr
, m_pDoc
->GetFormula(4, 101, srcSheet
));
3600 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.E2"_ustr
, m_pDoc
->GetFormula(4, 102, srcSheet
));
3601 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.E3"_ustr
, m_pDoc
->GetFormula(4, 103, srcSheet
));
3602 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.E4"_ustr
, m_pDoc
->GetFormula(4, 104, srcSheet
));
3603 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.E5"_ustr
, m_pDoc
->GetFormula(4, 105, srcSheet
));
3604 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.E6"_ustr
, m_pDoc
->GetFormula(4, 106, srcSheet
));
3605 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.E7"_ustr
, m_pDoc
->GetFormula(4, 107, srcSheet
));
3606 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.F1"_ustr
, m_pDoc
->GetFormula(5, 101, srcSheet
));
3607 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.F2"_ustr
, m_pDoc
->GetFormula(5, 102, srcSheet
));
3608 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.F3"_ustr
, m_pDoc
->GetFormula(5, 103, srcSheet
));
3609 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.F4"_ustr
, m_pDoc
->GetFormula(5, 104, srcSheet
));
3610 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.F5"_ustr
, m_pDoc
->GetFormula(5, 105, srcSheet
));
3611 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.F6"_ustr
, m_pDoc
->GetFormula(5, 106, srcSheet
));
3612 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.F7"_ustr
, m_pDoc
->GetFormula(5, 107, srcSheet
));
3613 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.G1"_ustr
, m_pDoc
->GetFormula(6, 101, srcSheet
));
3614 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.G2"_ustr
, m_pDoc
->GetFormula(6, 102, srcSheet
));
3615 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.G3"_ustr
, m_pDoc
->GetFormula(6, 103, srcSheet
));
3616 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.G4"_ustr
, m_pDoc
->GetFormula(6, 104, srcSheet
));
3617 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.G5"_ustr
, m_pDoc
->GetFormula(6, 105, srcSheet
));
3618 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.G6"_ustr
, m_pDoc
->GetFormula(6, 106, srcSheet
));
3619 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.G7"_ustr
, m_pDoc
->GetFormula(6, 107, srcSheet
));
3620 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.H1"_ustr
, m_pDoc
->GetFormula(7, 101, srcSheet
));
3621 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.H2"_ustr
, m_pDoc
->GetFormula(7, 102, srcSheet
));
3622 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.H3"_ustr
, m_pDoc
->GetFormula(7, 103, srcSheet
));
3623 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.H4"_ustr
, m_pDoc
->GetFormula(7, 104, srcSheet
));
3624 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.H5"_ustr
, m_pDoc
->GetFormula(7, 105, srcSheet
));
3625 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.H6"_ustr
, m_pDoc
->GetFormula(7, 106, srcSheet
));
3626 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.H7"_ustr
, m_pDoc
->GetFormula(7, 107, srcSheet
));
3627 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.I1"_ustr
, m_pDoc
->GetFormula(8, 101, srcSheet
));
3628 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.I2"_ustr
, m_pDoc
->GetFormula(8, 102, srcSheet
));
3629 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.I3"_ustr
, m_pDoc
->GetFormula(8, 103, srcSheet
));
3630 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.I4"_ustr
, m_pDoc
->GetFormula(8, 104, srcSheet
));
3631 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.I5"_ustr
, m_pDoc
->GetFormula(8, 105, srcSheet
));
3632 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.I6"_ustr
, m_pDoc
->GetFormula(8, 106, srcSheet
));
3633 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.I7"_ustr
, m_pDoc
->GetFormula(8, 107, srcSheet
));
3634 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.J1"_ustr
, m_pDoc
->GetFormula(9, 101, srcSheet
));
3635 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.J2"_ustr
, m_pDoc
->GetFormula(9, 102, srcSheet
));
3636 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.J3"_ustr
, m_pDoc
->GetFormula(9, 103, srcSheet
));
3637 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.J4"_ustr
, m_pDoc
->GetFormula(9, 104, srcSheet
));
3638 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.J5"_ustr
, m_pDoc
->GetFormula(9, 105, srcSheet
));
3639 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.J6"_ustr
, m_pDoc
->GetFormula(9, 106, srcSheet
));
3640 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.J7"_ustr
, m_pDoc
->GetFormula(9, 107, srcSheet
));
3642 m_pDoc
->DeleteTab(destSheet
);
3643 m_pDoc
->DeleteTab(srcSheet
);
3647 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.F3"_ustr
, m_pDoc
->GetFormula(1, 16, srcSheet
));
3648 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.$F$3"_ustr
, m_pDoc
->GetFormula(2, 16, srcSheet
));
3649 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.$F3"_ustr
, m_pDoc
->GetFormula(3, 16, srcSheet
));
3650 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.F$3"_ustr
, m_pDoc
->GetFormula(4, 16, srcSheet
));
3651 CPPUNIT_ASSERT_EQUAL(u
"=SUM(DestSheet.F3:F3)"_ustr
, m_pDoc
->GetFormula(5, 16, srcSheet
));
3652 CPPUNIT_ASSERT_EQUAL(u
"=SUM(DestSheet.$F$3:$F$3)"_ustr
,
3653 m_pDoc
->GetFormula(6, 16, srcSheet
));
3654 CPPUNIT_ASSERT_EQUAL(u
"=SUM(DestSheet.$F3:$F3)"_ustr
, m_pDoc
->GetFormula(7, 16, srcSheet
));
3655 CPPUNIT_ASSERT_EQUAL(u
"=SUM(DestSheet.F$3:F$3)"_ustr
, m_pDoc
->GetFormula(8, 16, srcSheet
));
3656 CPPUNIT_ASSERT_EQUAL(u
"=SUM(DestSheet.$D$2:$G$2)"_ustr
,
3657 m_pDoc
->GetFormula(9, 16, srcSheet
));
3658 CPPUNIT_ASSERT_EQUAL(u
"=SUM($B$3:$B$10)"_ustr
, m_pDoc
->GetFormula(10, 16, srcSheet
));
3660 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(1, 16, srcSheet
));
3661 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(2, 16, srcSheet
));
3662 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(3, 16, srcSheet
));
3663 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(4, 16, srcSheet
));
3664 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(5, 16, srcSheet
));
3665 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(6, 16, srcSheet
));
3666 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(7, 16, srcSheet
));
3667 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(8, 16, srcSheet
));
3668 CPPUNIT_ASSERT_EQUAL(10.0, m_pDoc
->GetValue(9, 16, srcSheet
));
3669 CPPUNIT_ASSERT_EQUAL(-27.0, m_pDoc
->GetValue(10, 16, srcSheet
));
3671 CPPUNIT_ASSERT_EQUAL(u
"=Range_C5"_ustr
, m_pDoc
->GetFormula(1, 17, srcSheet
));
3672 CPPUNIT_ASSERT_EQUAL(u
"=Range_aCa5"_ustr
, m_pDoc
->GetFormula(2, 17, srcSheet
));
3673 CPPUNIT_ASSERT_EQUAL(u
"=Range_aC5"_ustr
, m_pDoc
->GetFormula(3, 17, srcSheet
));
3674 CPPUNIT_ASSERT_EQUAL(u
"=Range_Ca5"_ustr
, m_pDoc
->GetFormula(4, 17, srcSheet
));
3675 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_C5_C5)"_ustr
, m_pDoc
->GetFormula(5, 17, srcSheet
));
3676 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_aCa5_aCa5)"_ustr
, m_pDoc
->GetFormula(6, 17, srcSheet
));
3677 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_aC5_aC5)"_ustr
, m_pDoc
->GetFormula(7, 17, srcSheet
));
3678 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_Ca5_Ca5)"_ustr
, m_pDoc
->GetFormula(8, 17, srcSheet
));
3679 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_aCa5_aCa8)"_ustr
, m_pDoc
->GetFormula(9, 17, srcSheet
));
3680 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_aCa5_aCa10)"_ustr
, m_pDoc
->GetFormula(10, 17, srcSheet
));
3682 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(1, 17, srcSheet
));
3683 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(2, 17, srcSheet
));
3684 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(3, 17, srcSheet
));
3685 CPPUNIT_ASSERT_EQUAL(0.0, m_pDoc
->GetValue(4, 17, srcSheet
));
3686 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(5, 17, srcSheet
));
3687 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(6, 17, srcSheet
));
3688 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(7, 17, srcSheet
));
3689 CPPUNIT_ASSERT_EQUAL(123.0, m_pDoc
->GetValue(8, 17, srcSheet
));
3690 CPPUNIT_ASSERT_EQUAL(10.0, m_pDoc
->GetValue(9, 17, srcSheet
));
3691 CPPUNIT_ASSERT_EQUAL(-27.0, m_pDoc
->GetValue(10, 17, srcSheet
));
3693 // Existing references to the destination range must not change
3694 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.D1"_ustr
, m_pDoc
->GetFormula(3, 101, srcSheet
));
3695 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.D2"_ustr
, m_pDoc
->GetFormula(3, 102, srcSheet
));
3696 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.D3"_ustr
, m_pDoc
->GetFormula(3, 103, srcSheet
));
3697 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.D4"_ustr
, m_pDoc
->GetFormula(3, 104, srcSheet
));
3698 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.D5"_ustr
, m_pDoc
->GetFormula(3, 105, srcSheet
));
3699 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.D6"_ustr
, m_pDoc
->GetFormula(3, 106, srcSheet
));
3700 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.D7"_ustr
, m_pDoc
->GetFormula(3, 107, srcSheet
));
3701 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.E1"_ustr
, m_pDoc
->GetFormula(4, 101, srcSheet
));
3702 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.E2"_ustr
, m_pDoc
->GetFormula(4, 102, srcSheet
));
3703 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.E3"_ustr
, m_pDoc
->GetFormula(4, 103, srcSheet
));
3704 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.E4"_ustr
, m_pDoc
->GetFormula(4, 104, srcSheet
));
3705 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.E5"_ustr
, m_pDoc
->GetFormula(4, 105, srcSheet
));
3706 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.E6"_ustr
, m_pDoc
->GetFormula(4, 106, srcSheet
));
3707 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.E7"_ustr
, m_pDoc
->GetFormula(4, 107, srcSheet
));
3708 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.F1"_ustr
, m_pDoc
->GetFormula(5, 101, srcSheet
));
3709 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.F2"_ustr
, m_pDoc
->GetFormula(5, 102, srcSheet
));
3710 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.F3"_ustr
, m_pDoc
->GetFormula(5, 103, srcSheet
));
3711 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.F4"_ustr
, m_pDoc
->GetFormula(5, 104, srcSheet
));
3712 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.F5"_ustr
, m_pDoc
->GetFormula(5, 105, srcSheet
));
3713 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.F6"_ustr
, m_pDoc
->GetFormula(5, 106, srcSheet
));
3714 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.F7"_ustr
, m_pDoc
->GetFormula(5, 107, srcSheet
));
3715 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.G1"_ustr
, m_pDoc
->GetFormula(6, 101, srcSheet
));
3716 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.G2"_ustr
, m_pDoc
->GetFormula(6, 102, srcSheet
));
3717 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.G3"_ustr
, m_pDoc
->GetFormula(6, 103, srcSheet
));
3718 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.G4"_ustr
, m_pDoc
->GetFormula(6, 104, srcSheet
));
3719 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.G5"_ustr
, m_pDoc
->GetFormula(6, 105, srcSheet
));
3720 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.G6"_ustr
, m_pDoc
->GetFormula(6, 106, srcSheet
));
3721 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.G7"_ustr
, m_pDoc
->GetFormula(6, 107, srcSheet
));
3722 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.H1"_ustr
, m_pDoc
->GetFormula(7, 101, srcSheet
));
3723 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.H2"_ustr
, m_pDoc
->GetFormula(7, 102, srcSheet
));
3724 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.H3"_ustr
, m_pDoc
->GetFormula(7, 103, srcSheet
));
3725 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.H4"_ustr
, m_pDoc
->GetFormula(7, 104, srcSheet
));
3726 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.H5"_ustr
, m_pDoc
->GetFormula(7, 105, srcSheet
));
3727 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.H6"_ustr
, m_pDoc
->GetFormula(7, 106, srcSheet
));
3728 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.H7"_ustr
, m_pDoc
->GetFormula(7, 107, srcSheet
));
3729 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.I1"_ustr
, m_pDoc
->GetFormula(8, 101, srcSheet
));
3730 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.I2"_ustr
, m_pDoc
->GetFormula(8, 102, srcSheet
));
3731 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.I3"_ustr
, m_pDoc
->GetFormula(8, 103, srcSheet
));
3732 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.I4"_ustr
, m_pDoc
->GetFormula(8, 104, srcSheet
));
3733 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.I5"_ustr
, m_pDoc
->GetFormula(8, 105, srcSheet
));
3734 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.I6"_ustr
, m_pDoc
->GetFormula(8, 106, srcSheet
));
3735 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.I7"_ustr
, m_pDoc
->GetFormula(8, 107, srcSheet
));
3736 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.J1"_ustr
, m_pDoc
->GetFormula(9, 101, srcSheet
));
3737 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.J2"_ustr
, m_pDoc
->GetFormula(9, 102, srcSheet
));
3738 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.J3"_ustr
, m_pDoc
->GetFormula(9, 103, srcSheet
));
3739 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.J4"_ustr
, m_pDoc
->GetFormula(9, 104, srcSheet
));
3740 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.J5"_ustr
, m_pDoc
->GetFormula(9, 105, srcSheet
));
3741 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.J6"_ustr
, m_pDoc
->GetFormula(9, 106, srcSheet
));
3742 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.J7"_ustr
, m_pDoc
->GetFormula(9, 107, srcSheet
));
3746 void TestCopyPaste::checkCopyPasteSpecialFilteredTranspose(bool bSkipEmpty
)
3748 const SCTAB srcSheet
= 0;
3749 const SCTAB destSheet
= 1;
3752 ┌--- filtered src row 2 ┌--- repeated row
3757 2 | 1 B*| 3 B*| 4 | 1 B*|
3758 3 | =D2+10 *| =E5+30 b*| =D2+40 b*| =G2+10 *|
3759 4 | a | c *| d *| a |
3760 5 | R1 *| 5 *| R4 *| R1 *|
3761 6 | =D2+F2+60 | B*| =C2+E2+70 *| =G2+I2+60 |
3762 7 | =SUMIF(D2:G2;"<4") | | =B$3+$B$5+80 *| =SUMIF(G2:J2;"<4") |
3764 * means note attached
3767 //check cell content after transposed copy/paste of filtered data
3768 // Note: column F is a repetition of srcSheet.Column A
3769 // Col C and G are checked to be empty
3770 const EditTextObject
* pEditObj
;
3772 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(2, 0, destSheet
));
3773 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(3, 0, destSheet
));
3774 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(4, 0, destSheet
));
3775 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(5, 0, destSheet
));
3776 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(6, 0, destSheet
));
3777 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(7, 0, destSheet
));
3779 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(2, 1, destSheet
));
3780 CPPUNIT_ASSERT_EQUAL(u
"1000"_ustr
, m_pDoc
->GetString(2, 1, destSheet
));
3781 CPPUNIT_ASSERT_EQUAL_MESSAGE("transposed cell D2", 1.0, m_pDoc
->GetValue(3, 1, destSheet
));
3782 CPPUNIT_ASSERT_EQUAL_MESSAGE("transposed cell E2", 3.0, m_pDoc
->GetValue(4, 1, destSheet
));
3783 CPPUNIT_ASSERT_EQUAL_MESSAGE("transposed cell F2", 4.0, m_pDoc
->GetValue(5, 1, destSheet
));
3784 CPPUNIT_ASSERT_EQUAL_MESSAGE("transposed cell G2 (repetition of D2)", 1.0,
3785 m_pDoc
->GetValue(6, 1, destSheet
));
3786 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(7, 1, destSheet
));
3787 CPPUNIT_ASSERT_EQUAL(u
"1000"_ustr
, m_pDoc
->GetString(7, 1, destSheet
));
3789 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(2, 2, destSheet
));
3790 CPPUNIT_ASSERT_EQUAL(u
"1000"_ustr
, m_pDoc
->GetString(2, 2, destSheet
));
3791 CPPUNIT_ASSERT_EQUAL_MESSAGE("transposed D3", 11.0, m_pDoc
->GetValue(3, 2, destSheet
));
3792 CPPUNIT_ASSERT_EQUAL_MESSAGE("transposed D3", u
"=D2+10"_ustr
,
3793 m_pDoc
->GetFormula(3, 2, destSheet
));
3794 CPPUNIT_ASSERT_EQUAL_MESSAGE("transposed E3", u
"=E5+30"_ustr
,
3795 m_pDoc
->GetFormula(4, 2, destSheet
));
3796 CPPUNIT_ASSERT_EQUAL_MESSAGE("transposed E3", 35.0, m_pDoc
->GetValue(4, 2, destSheet
));
3797 CPPUNIT_ASSERT_EQUAL_MESSAGE("transposed F3", u
"=D2+40"_ustr
,
3798 m_pDoc
->GetFormula(5, 2, destSheet
));
3799 CPPUNIT_ASSERT_EQUAL_MESSAGE("transposed F3", 41.0, m_pDoc
->GetValue(5, 2, destSheet
));
3800 CPPUNIT_ASSERT_EQUAL_MESSAGE("transposed F3", 11.0, m_pDoc
->GetValue(6, 2, destSheet
));
3801 CPPUNIT_ASSERT_EQUAL_MESSAGE("transposed G3 (repetition of D3)", u
"=G2+10"_ustr
,
3802 m_pDoc
->GetFormula(6, 2, destSheet
));
3803 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(7, 2, destSheet
));
3804 CPPUNIT_ASSERT_EQUAL(u
"1000"_ustr
, m_pDoc
->GetString(7, 2, destSheet
));
3806 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(2, 3, destSheet
));
3807 CPPUNIT_ASSERT_EQUAL(u
"1000"_ustr
, m_pDoc
->GetString(2, 3, destSheet
));
3808 CPPUNIT_ASSERT_EQUAL_MESSAGE("Cell D4", u
"a"_ustr
, m_pDoc
->GetString(3, 3, destSheet
));
3809 CPPUNIT_ASSERT_EQUAL_MESSAGE("Cell E4", u
"c"_ustr
, m_pDoc
->GetString(4, 3, destSheet
));
3810 CPPUNIT_ASSERT_EQUAL_MESSAGE("Cell F4", u
"d"_ustr
, m_pDoc
->GetString(5, 3, destSheet
));
3811 CPPUNIT_ASSERT_EQUAL_MESSAGE("Cell G4 (repetition of D4)", u
"a"_ustr
,
3812 m_pDoc
->GetString(6, 3, destSheet
));
3813 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(7, 3, destSheet
));
3814 CPPUNIT_ASSERT_EQUAL(u
"1000"_ustr
, m_pDoc
->GetString(7, 3, destSheet
));
3816 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(2, 4, destSheet
));
3817 pEditObj
= m_pDoc
->GetEditText(ScAddress(2, 4, destSheet
));
3818 CPPUNIT_ASSERT_MESSAGE("There should be no edit cell in C5.", pEditObj
== nullptr);
3819 pEditObj
= m_pDoc
->GetEditText(ScAddress(3, 4, destSheet
));
3820 CPPUNIT_ASSERT_MESSAGE("There should be an edit cell in D5.", pEditObj
);
3821 CPPUNIT_ASSERT_EQUAL_MESSAGE("Edit cell value wrong in D5 ", u
"R1"_ustr
, pEditObj
->GetText(0));
3822 CPPUNIT_ASSERT_EQUAL_MESSAGE("transposed cell E5", 5.0, m_pDoc
->GetValue(4, 4, destSheet
));
3823 pEditObj
= m_pDoc
->GetEditText(ScAddress(5, 4, destSheet
));
3824 CPPUNIT_ASSERT_MESSAGE("There should be an edit cell in F5.", pEditObj
);
3825 CPPUNIT_ASSERT_EQUAL_MESSAGE("Edit cell value wrong F5.", u
"R4"_ustr
, pEditObj
->GetText(0));
3826 pEditObj
= m_pDoc
->GetEditText(ScAddress(6, 4, destSheet
));
3827 CPPUNIT_ASSERT_MESSAGE("There should be an edit cell in G5. (repetition of D5)", pEditObj
);
3828 CPPUNIT_ASSERT_EQUAL_MESSAGE("Edit cell value wrong G5. (repetition of D5)", u
"R1"_ustr
,
3829 pEditObj
->GetText(0));
3830 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(7, 4, destSheet
));
3831 pEditObj
= m_pDoc
->GetEditText(ScAddress(7, 4, destSheet
));
3832 CPPUNIT_ASSERT_MESSAGE("There should be no edit cell in H5.", pEditObj
== nullptr);
3834 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(2, 5, destSheet
));
3835 CPPUNIT_ASSERT_EQUAL(u
"1000"_ustr
, m_pDoc
->GetString(2, 5, destSheet
));
3836 CPPUNIT_ASSERT_EQUAL_MESSAGE("transposed D6", u
"=D2+F2+60"_ustr
,
3837 m_pDoc
->GetFormula(3, 5, destSheet
));
3838 // formulas over filtered rows are not adjusted
3839 CPPUNIT_ASSERT_EQUAL_MESSAGE("transposed D6", 65.0,
3840 m_pDoc
->GetValue(ScAddress(3, 5, destSheet
)));
3842 CPPUNIT_ASSERT_EQUAL_MESSAGE("Cell E6", OUString(), m_pDoc
->GetString(4, 5, destSheet
));
3844 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(4, 5, destSheet
));
3845 CPPUNIT_ASSERT_EQUAL_MESSAGE("transposed F6", u
"=C2+E2+70"_ustr
,
3846 m_pDoc
->GetFormula(5, 5, destSheet
));
3847 // F6, formulas over filtered rows are not adjusted
3848 CPPUNIT_ASSERT_EQUAL_MESSAGE("transposed F6", 1073.0,
3849 m_pDoc
->GetValue(ScAddress(5, 5, destSheet
)));
3850 CPPUNIT_ASSERT_EQUAL_MESSAGE("transposed G6 (repetition of D6)", u
"=G2+I2+60"_ustr
,
3851 m_pDoc
->GetFormula(6, 5, destSheet
));
3852 CPPUNIT_ASSERT_EQUAL_MESSAGE("transposed G6 (repetition of D6)", 1061.0,
3853 m_pDoc
->GetValue(6, 5, destSheet
));
3854 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(7, 5, destSheet
));
3855 CPPUNIT_ASSERT_EQUAL(u
"1000"_ustr
, m_pDoc
->GetString(7, 5, destSheet
));
3857 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(2, 6, destSheet
));
3858 CPPUNIT_ASSERT_EQUAL(u
"1000"_ustr
, m_pDoc
->GetString(2, 6, destSheet
));
3859 CPPUNIT_ASSERT_EQUAL_MESSAGE("transposed D7", u
"=SUMIF(D2:G2;\"<4\")"_ustr
,
3860 m_pDoc
->GetFormula(3, 6, destSheet
));
3861 CPPUNIT_ASSERT_EQUAL_MESSAGE("transposed D7", 5.0, m_pDoc
->GetValue(3, 6, destSheet
));
3863 CPPUNIT_ASSERT_EQUAL_MESSAGE("Cell E6", OUString(), m_pDoc
->GetString(4, 6, destSheet
));
3865 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(4, 6, destSheet
));
3866 CPPUNIT_ASSERT_EQUAL_MESSAGE("transposed F7", u
"=B$3+$B$5+80"_ustr
,
3867 m_pDoc
->GetFormula(5, 6, destSheet
));
3868 CPPUNIT_ASSERT_EQUAL_MESSAGE("transposed F6", 2080.0, m_pDoc
->GetValue(5, 6, destSheet
));
3869 CPPUNIT_ASSERT_EQUAL_MESSAGE("transposed G7 (repetition of D7)", u
"=SUMIF(G2:J2;\"<4\")"_ustr
,
3870 m_pDoc
->GetFormula(6, 6, destSheet
));
3871 CPPUNIT_ASSERT_EQUAL_MESSAGE("transposed G7 (repetition of D7)", 1061.0,
3872 m_pDoc
->GetValue(6, 5, destSheet
));
3873 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(7, 6, destSheet
));
3874 CPPUNIT_ASSERT_EQUAL(u
"1000"_ustr
, m_pDoc
->GetString(7, 6, destSheet
));
3877 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(2, 7, destSheet
));
3878 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(3, 7, destSheet
));
3879 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(4, 7, destSheet
));
3880 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(5, 7, destSheet
));
3881 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(6, 7, destSheet
));
3882 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(7, 7, destSheet
));
3886 const SfxPoolItem
* pItem
= nullptr;
3887 m_pDoc
->GetPattern(ScAddress(3, 1, destSheet
))->GetItemSet().HasItem(ATTR_BACKGROUND
, &pItem
);
3888 CPPUNIT_ASSERT_MESSAGE("D2 has a pattern", pItem
);
3889 CPPUNIT_ASSERT_EQUAL_MESSAGE("D2 has blue background", COL_BLUE
,
3890 static_cast<const SvxBrushItem
*>(pItem
)->GetColor());
3891 m_pDoc
->GetPattern(ScAddress(4, 1, destSheet
))->GetItemSet().HasItem(ATTR_BACKGROUND
, &pItem
);
3892 CPPUNIT_ASSERT_MESSAGE("E2 has a pattern", pItem
);
3893 CPPUNIT_ASSERT_EQUAL(COL_BLUE
, static_cast<const SvxBrushItem
*>(pItem
)->GetColor());
3894 m_pDoc
->GetPattern(ScAddress(5, 1, destSheet
))->GetItemSet().HasItem(ATTR_BACKGROUND
, &pItem
);
3895 CPPUNIT_ASSERT_MESSAGE("F2 has no pattern", !pItem
);
3896 m_pDoc
->GetPattern(ScAddress(6, 1, destSheet
))->GetItemSet().HasItem(ATTR_BACKGROUND
, &pItem
);
3897 CPPUNIT_ASSERT_MESSAGE("G2 has a pattern", pItem
);
3898 CPPUNIT_ASSERT_EQUAL_MESSAGE("G2 has a pattern", COL_BLUE
,
3899 static_cast<const SvxBrushItem
*>(pItem
)->GetColor());
3900 m_pDoc
->GetPattern(ScAddress(7, 1, destSheet
))->GetItemSet().HasItem(ATTR_BACKGROUND
, &pItem
);
3901 CPPUNIT_ASSERT_MESSAGE("H2 has no pattern", !pItem
);
3902 m_pDoc
->GetPattern(ScAddress(4, 5, destSheet
))->GetItemSet().HasItem(ATTR_BACKGROUND
, &pItem
);
3903 CPPUNIT_ASSERT_EQUAL(bSkipEmpty
, pItem
== nullptr);
3905 CPPUNIT_ASSERT_EQUAL(COL_GREEN
, static_cast<const SvxBrushItem
*>(pItem
)->GetColor());
3907 // check border, left and right borders were transformed to top and bottom borders
3908 pItem
= m_pDoc
->GetAttr(ScAddress(3, 2, destSheet
), ATTR_BORDER
);
3909 CPPUNIT_ASSERT_MESSAGE("D3 has a border", pItem
);
3910 CPPUNIT_ASSERT_MESSAGE("D3 has no top border",
3911 !static_cast<const SvxBoxItem
*>(pItem
)->GetTop());
3912 CPPUNIT_ASSERT_MESSAGE("D3 has no bottom border",
3913 !static_cast<const SvxBoxItem
*>(pItem
)->GetBottom());
3914 CPPUNIT_ASSERT_MESSAGE("D3 has no left border",
3915 !static_cast<const SvxBoxItem
*>(pItem
)->GetLeft());
3916 CPPUNIT_ASSERT_MESSAGE("D3 has no right border",
3917 !static_cast<const SvxBoxItem
*>(pItem
)->GetRight());
3918 pItem
= m_pDoc
->GetAttr(ScAddress(4, 2, destSheet
), ATTR_BORDER
);
3919 CPPUNIT_ASSERT_MESSAGE("E3 has a border", pItem
);
3920 CPPUNIT_ASSERT_MESSAGE("E3 has top border", static_cast<const SvxBoxItem
*>(pItem
)->GetTop());
3921 CPPUNIT_ASSERT_MESSAGE("E3 has bottom border",
3922 static_cast<const SvxBoxItem
*>(pItem
)->GetBottom());
3923 CPPUNIT_ASSERT_MESSAGE("E3 has no left border",
3924 !static_cast<const SvxBoxItem
*>(pItem
)->GetLeft());
3925 CPPUNIT_ASSERT_MESSAGE("E3 has no right border",
3926 !static_cast<const SvxBoxItem
*>(pItem
)->GetRight());
3927 pItem
= m_pDoc
->GetAttr(ScAddress(5, 2, destSheet
), ATTR_BORDER
);
3928 CPPUNIT_ASSERT_MESSAGE("F3 has a border", pItem
);
3929 CPPUNIT_ASSERT_MESSAGE("F3 has top border", static_cast<const SvxBoxItem
*>(pItem
)->GetTop());
3930 CPPUNIT_ASSERT_MESSAGE("F3 has bottom border",
3931 static_cast<const SvxBoxItem
*>(pItem
)->GetBottom());
3932 CPPUNIT_ASSERT_MESSAGE("F3 has no left border",
3933 !static_cast<const SvxBoxItem
*>(pItem
)->GetLeft());
3934 CPPUNIT_ASSERT_MESSAGE("F3 has no right border",
3935 !static_cast<const SvxBoxItem
*>(pItem
)->GetRight());
3936 pItem
= m_pDoc
->GetAttr(ScAddress(6, 2, destSheet
), ATTR_BORDER
);
3937 CPPUNIT_ASSERT_MESSAGE("G3 has a border", pItem
);
3938 CPPUNIT_ASSERT_MESSAGE("G3 has no top border",
3939 !static_cast<const SvxBoxItem
*>(pItem
)->GetTop());
3940 CPPUNIT_ASSERT_MESSAGE("G3 has no bottom border",
3941 !static_cast<const SvxBoxItem
*>(pItem
)->GetBottom());
3942 CPPUNIT_ASSERT_MESSAGE("G3 has no left border",
3943 !static_cast<const SvxBoxItem
*>(pItem
)->GetLeft());
3944 CPPUNIT_ASSERT_MESSAGE("G3 has no right border",
3945 !static_cast<const SvxBoxItem
*>(pItem
)->GetRight());
3946 pItem
= m_pDoc
->GetAttr(ScAddress(7, 2, destSheet
), ATTR_BORDER
);
3947 CPPUNIT_ASSERT_MESSAGE("H3 has a border", pItem
);
3948 CPPUNIT_ASSERT_MESSAGE("H3 has no top border",
3949 !static_cast<const SvxBoxItem
*>(pItem
)->GetTop());
3950 CPPUNIT_ASSERT_MESSAGE("H3 has no bottom border",
3951 !static_cast<const SvxBoxItem
*>(pItem
)->GetBottom());
3952 CPPUNIT_ASSERT_MESSAGE("H3 has no left border",
3953 !static_cast<const SvxBoxItem
*>(pItem
)->GetLeft());
3954 CPPUNIT_ASSERT_MESSAGE("H3 has no right border",
3955 !static_cast<const SvxBoxItem
*>(pItem
)->GetRight());
3957 // check notes after transposed copy/paste
3958 // check presence of notes
3959 CPPUNIT_ASSERT_MESSAGE("C1: no note", !m_pDoc
->HasNote(2, 0, destSheet
));
3960 CPPUNIT_ASSERT_MESSAGE("D1: no note", !m_pDoc
->HasNote(3, 0, destSheet
));
3961 CPPUNIT_ASSERT_MESSAGE("E1: no note", !m_pDoc
->HasNote(4, 0, destSheet
));
3962 CPPUNIT_ASSERT_MESSAGE("F1: no note", !m_pDoc
->HasNote(5, 0, destSheet
));
3963 CPPUNIT_ASSERT_MESSAGE("G1: no note", !m_pDoc
->HasNote(6, 0, destSheet
));
3964 CPPUNIT_ASSERT_MESSAGE("H1: no note", !m_pDoc
->HasNote(7, 0, destSheet
));
3965 CPPUNIT_ASSERT_MESSAGE("C2: no note", !m_pDoc
->HasNote(2, 1, destSheet
));
3966 CPPUNIT_ASSERT_MESSAGE("D2: a note", m_pDoc
->HasNote(3, 1, destSheet
));
3967 CPPUNIT_ASSERT_MESSAGE("E2: a note", m_pDoc
->HasNote(4, 1, destSheet
));
3968 CPPUNIT_ASSERT_MESSAGE("F2: no note", !m_pDoc
->HasNote(5, 1, destSheet
));
3969 CPPUNIT_ASSERT_MESSAGE("G2: a note", m_pDoc
->HasNote(6, 1, destSheet
));
3970 CPPUNIT_ASSERT_MESSAGE("H2: no note", !m_pDoc
->HasNote(7, 1, destSheet
));
3971 CPPUNIT_ASSERT_MESSAGE("C3: no note", !m_pDoc
->HasNote(2, 2, destSheet
));
3972 CPPUNIT_ASSERT_MESSAGE("D3: a note", m_pDoc
->HasNote(3, 2, destSheet
));
3973 CPPUNIT_ASSERT_MESSAGE("E3: a note", m_pDoc
->HasNote(4, 2, destSheet
));
3974 CPPUNIT_ASSERT_MESSAGE("F3: a note", m_pDoc
->HasNote(5, 2, destSheet
));
3975 CPPUNIT_ASSERT_MESSAGE("G3: a note", m_pDoc
->HasNote(6, 2, destSheet
));
3976 CPPUNIT_ASSERT_MESSAGE("H3: no note", !m_pDoc
->HasNote(7, 2, destSheet
));
3977 CPPUNIT_ASSERT_MESSAGE("C4: no note", !m_pDoc
->HasNote(2, 3, destSheet
));
3978 CPPUNIT_ASSERT_MESSAGE("D4: no note", !m_pDoc
->HasNote(3, 3, destSheet
));
3979 CPPUNIT_ASSERT_MESSAGE("E4: a note", m_pDoc
->HasNote(4, 3, destSheet
));
3980 CPPUNIT_ASSERT_MESSAGE("F4: a note", m_pDoc
->HasNote(5, 3, destSheet
));
3981 CPPUNIT_ASSERT_MESSAGE("G4: no note", !m_pDoc
->HasNote(6, 3, destSheet
));
3982 CPPUNIT_ASSERT_MESSAGE("H4: no note", !m_pDoc
->HasNote(7, 3, destSheet
));
3983 CPPUNIT_ASSERT_MESSAGE("C5: no note", !m_pDoc
->HasNote(2, 4, destSheet
));
3984 CPPUNIT_ASSERT_MESSAGE("D5: a note", m_pDoc
->HasNote(3, 4, destSheet
));
3985 CPPUNIT_ASSERT_MESSAGE("E5: a note", m_pDoc
->HasNote(4, 4, destSheet
));
3986 CPPUNIT_ASSERT_MESSAGE("F5: a note", m_pDoc
->HasNote(5, 4, destSheet
));
3987 CPPUNIT_ASSERT_MESSAGE("G5: a note", m_pDoc
->HasNote(6, 4, destSheet
));
3988 CPPUNIT_ASSERT_MESSAGE("H5: no note", !m_pDoc
->HasNote(7, 4, destSheet
));
3989 CPPUNIT_ASSERT_MESSAGE("C6: no note", !m_pDoc
->HasNote(2, 5, destSheet
));
3990 CPPUNIT_ASSERT_MESSAGE("D6: no note", !m_pDoc
->HasNote(3, 5, destSheet
));
3991 CPPUNIT_ASSERT_EQUAL(!bSkipEmpty
, m_pDoc
->HasNote(4, 5, destSheet
));
3992 CPPUNIT_ASSERT_MESSAGE("F6: a note", m_pDoc
->HasNote(5, 5, destSheet
));
3993 CPPUNIT_ASSERT_MESSAGE("G6: no note", !m_pDoc
->HasNote(6, 5, destSheet
));
3994 CPPUNIT_ASSERT_MESSAGE("H6: no note", !m_pDoc
->HasNote(7, 5, destSheet
));
3995 CPPUNIT_ASSERT_MESSAGE("C7: no note", !m_pDoc
->HasNote(2, 6, destSheet
));
3996 CPPUNIT_ASSERT_MESSAGE("D7: no note", !m_pDoc
->HasNote(3, 6, destSheet
));
3997 CPPUNIT_ASSERT_MESSAGE("E7: no note", !m_pDoc
->HasNote(4, 6, destSheet
));
3998 CPPUNIT_ASSERT_MESSAGE("F7: a note", m_pDoc
->HasNote(5, 6, destSheet
));
3999 CPPUNIT_ASSERT_MESSAGE("G7: no note", !m_pDoc
->HasNote(6, 6, destSheet
));
4000 CPPUNIT_ASSERT_MESSAGE("H7: no note", !m_pDoc
->HasNote(7, 6, destSheet
));
4001 CPPUNIT_ASSERT_MESSAGE("C8: no note", !m_pDoc
->HasNote(2, 7, destSheet
));
4002 CPPUNIT_ASSERT_MESSAGE("D8: no note", !m_pDoc
->HasNote(3, 7, destSheet
));
4003 CPPUNIT_ASSERT_MESSAGE("E8: no note", !m_pDoc
->HasNote(4, 7, destSheet
));
4004 CPPUNIT_ASSERT_MESSAGE("F8: no note", !m_pDoc
->HasNote(5, 7, destSheet
));
4005 CPPUNIT_ASSERT_MESSAGE("G8: no note", !m_pDoc
->HasNote(6, 7, destSheet
));
4006 CPPUNIT_ASSERT_MESSAGE("H8: no note", !m_pDoc
->HasNote(7, 7, destSheet
));
4008 // check values of notes
4009 CPPUNIT_ASSERT_EQUAL_MESSAGE("Cell D2", u
"Note A1"_ustr
, getNote(3, 1, destSheet
));
4010 CPPUNIT_ASSERT_EQUAL_MESSAGE("Cell E2", u
"Note A3"_ustr
, getNote(4, 1, destSheet
));
4012 CPPUNIT_ASSERT_EQUAL_MESSAGE("Cell G2", u
"Note A1"_ustr
, getNote(6, 1, destSheet
));
4013 CPPUNIT_ASSERT_EQUAL_MESSAGE("Cell D3", u
"Note B1"_ustr
, getNote(3, 2, destSheet
));
4014 CPPUNIT_ASSERT_EQUAL_MESSAGE("Cell E3", u
"Note B3"_ustr
, getNote(4, 2, destSheet
));
4015 CPPUNIT_ASSERT_EQUAL_MESSAGE("Cell F3", u
"Note B4"_ustr
, getNote(5, 2, destSheet
));
4016 CPPUNIT_ASSERT_EQUAL_MESSAGE("Cell G3", u
"Note B1"_ustr
, getNote(6, 2, destSheet
));
4018 CPPUNIT_ASSERT_EQUAL_MESSAGE("Cell E4", u
"Note C3"_ustr
, getNote(4, 3, destSheet
));
4019 CPPUNIT_ASSERT_EQUAL_MESSAGE("Cell F4", u
"Note C4"_ustr
, getNote(5, 3, destSheet
));
4021 CPPUNIT_ASSERT_EQUAL_MESSAGE("Cell D5", u
"Note D1"_ustr
, getNote(3, 4, destSheet
));
4022 CPPUNIT_ASSERT_EQUAL_MESSAGE("Cell E5", u
"Note D3"_ustr
, getNote(4, 4, destSheet
));
4023 CPPUNIT_ASSERT_EQUAL_MESSAGE("Cell F5", u
"Note D4"_ustr
, getNote(5, 4, destSheet
));
4024 CPPUNIT_ASSERT_EQUAL_MESSAGE("Cell G5", u
"Note D1"_ustr
, getNote(6, 4, destSheet
));
4026 CPPUNIT_ASSERT_EQUAL(u
"Note E2"_ustr
, getNote(4, 5, destSheet
));
4027 CPPUNIT_ASSERT_EQUAL_MESSAGE("Cell F6", u
"Note E4"_ustr
, getNote(5, 5, destSheet
));
4028 CPPUNIT_ASSERT_EQUAL_MESSAGE("Cell F7", u
"Note F4"_ustr
, getNote(5, 6, destSheet
));
4030 // check row 16 on src sheet, refs to copied/cut range
4031 CPPUNIT_ASSERT_EQUAL(u
"=C5"_ustr
, m_pDoc
->GetFormula(1, 16, srcSheet
));
4032 CPPUNIT_ASSERT_EQUAL(u
"=$C$5"_ustr
, m_pDoc
->GetFormula(2, 16, srcSheet
));
4033 CPPUNIT_ASSERT_EQUAL(u
"=$C5"_ustr
, m_pDoc
->GetFormula(3, 16, srcSheet
));
4034 CPPUNIT_ASSERT_EQUAL(u
"=C$5"_ustr
, m_pDoc
->GetFormula(4, 16, srcSheet
));
4035 CPPUNIT_ASSERT_EQUAL(u
"=SUM(C5:C5)"_ustr
, m_pDoc
->GetFormula(5, 16, srcSheet
));
4036 CPPUNIT_ASSERT_EQUAL(u
"=SUM($C$5:$C$5)"_ustr
, m_pDoc
->GetFormula(6, 16, srcSheet
));
4037 CPPUNIT_ASSERT_EQUAL(u
"=SUM($C5:$C5)"_ustr
, m_pDoc
->GetFormula(7, 16, srcSheet
));
4038 CPPUNIT_ASSERT_EQUAL(u
"=SUM(C$5:C$5)"_ustr
, m_pDoc
->GetFormula(8, 16, srcSheet
));
4039 CPPUNIT_ASSERT_EQUAL(u
"=SUM($B$3:$B$6)"_ustr
, m_pDoc
->GetFormula(9, 16, srcSheet
));
4040 CPPUNIT_ASSERT_EQUAL(u
"=SUM($B$3:$B$10)"_ustr
, m_pDoc
->GetFormula(10, 16, srcSheet
));
4042 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(1, 16, srcSheet
));
4043 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(2, 16, srcSheet
));
4044 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(3, 16, srcSheet
));
4045 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(4, 16, srcSheet
));
4046 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(5, 16, srcSheet
));
4047 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(6, 16, srcSheet
));
4048 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(7, 16, srcSheet
));
4049 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(8, 16, srcSheet
));
4050 CPPUNIT_ASSERT_EQUAL(10.0, m_pDoc
->GetValue(9, 16, srcSheet
));
4051 CPPUNIT_ASSERT_EQUAL(-17.0, m_pDoc
->GetValue(10, 16, srcSheet
));
4053 CPPUNIT_ASSERT_EQUAL(u
"=Range_C5"_ustr
, m_pDoc
->GetFormula(1, 17, srcSheet
));
4054 CPPUNIT_ASSERT_EQUAL(u
"=Range_aCa5"_ustr
, m_pDoc
->GetFormula(2, 17, srcSheet
));
4055 CPPUNIT_ASSERT_EQUAL(u
"=Range_aC5"_ustr
, m_pDoc
->GetFormula(3, 17, srcSheet
));
4056 CPPUNIT_ASSERT_EQUAL(u
"=Range_Ca5"_ustr
, m_pDoc
->GetFormula(4, 17, srcSheet
));
4057 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_C5_C5)"_ustr
, m_pDoc
->GetFormula(5, 17, srcSheet
));
4058 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_aCa5_aCa5)"_ustr
, m_pDoc
->GetFormula(6, 17, srcSheet
));
4059 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_aC5_aC5)"_ustr
, m_pDoc
->GetFormula(7, 17, srcSheet
));
4060 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_Ca5_Ca5)"_ustr
, m_pDoc
->GetFormula(8, 17, srcSheet
));
4061 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_aCa5_aCa8)"_ustr
, m_pDoc
->GetFormula(9, 17, srcSheet
));
4062 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_aCa5_aCa10)"_ustr
, m_pDoc
->GetFormula(10, 17, srcSheet
));
4064 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(1, 17, srcSheet
));
4065 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(2, 17, srcSheet
));
4066 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(3, 17, srcSheet
));
4067 CPPUNIT_ASSERT_EQUAL(5.0, m_pDoc
->GetValue(4, 17, srcSheet
));
4068 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(5, 17, srcSheet
));
4069 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(6, 17, srcSheet
));
4070 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(7, 17, srcSheet
));
4071 CPPUNIT_ASSERT_EQUAL(123.0, m_pDoc
->GetValue(8, 17, srcSheet
));
4072 CPPUNIT_ASSERT_EQUAL(10.0, m_pDoc
->GetValue(9, 17, srcSheet
));
4073 CPPUNIT_ASSERT_EQUAL(-17.0, m_pDoc
->GetValue(10, 17, srcSheet
));
4075 // Existing references to the destination range must not change
4076 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.D1"_ustr
, m_pDoc
->GetFormula(3, 101, srcSheet
));
4077 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.D2"_ustr
, m_pDoc
->GetFormula(3, 102, srcSheet
));
4078 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.D3"_ustr
, m_pDoc
->GetFormula(3, 103, srcSheet
));
4079 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.D4"_ustr
, m_pDoc
->GetFormula(3, 104, srcSheet
));
4080 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.D5"_ustr
, m_pDoc
->GetFormula(3, 105, srcSheet
));
4081 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.D6"_ustr
, m_pDoc
->GetFormula(3, 106, srcSheet
));
4082 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.D7"_ustr
, m_pDoc
->GetFormula(3, 107, srcSheet
));
4083 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.E1"_ustr
, m_pDoc
->GetFormula(4, 101, srcSheet
));
4084 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.E2"_ustr
, m_pDoc
->GetFormula(4, 102, srcSheet
));
4085 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.E3"_ustr
, m_pDoc
->GetFormula(4, 103, srcSheet
));
4086 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.E4"_ustr
, m_pDoc
->GetFormula(4, 104, srcSheet
));
4087 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.E5"_ustr
, m_pDoc
->GetFormula(4, 105, srcSheet
));
4088 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.E6"_ustr
, m_pDoc
->GetFormula(4, 106, srcSheet
));
4089 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.E7"_ustr
, m_pDoc
->GetFormula(4, 107, srcSheet
));
4090 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.F1"_ustr
, m_pDoc
->GetFormula(5, 101, srcSheet
));
4091 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.F2"_ustr
, m_pDoc
->GetFormula(5, 102, srcSheet
));
4092 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.F3"_ustr
, m_pDoc
->GetFormula(5, 103, srcSheet
));
4093 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.F4"_ustr
, m_pDoc
->GetFormula(5, 104, srcSheet
));
4094 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.F5"_ustr
, m_pDoc
->GetFormula(5, 105, srcSheet
));
4095 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.F6"_ustr
, m_pDoc
->GetFormula(5, 106, srcSheet
));
4096 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.F7"_ustr
, m_pDoc
->GetFormula(5, 107, srcSheet
));
4097 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.G1"_ustr
, m_pDoc
->GetFormula(6, 101, srcSheet
));
4098 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.G2"_ustr
, m_pDoc
->GetFormula(6, 102, srcSheet
));
4099 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.G3"_ustr
, m_pDoc
->GetFormula(6, 103, srcSheet
));
4100 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.G4"_ustr
, m_pDoc
->GetFormula(6, 104, srcSheet
));
4101 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.G5"_ustr
, m_pDoc
->GetFormula(6, 105, srcSheet
));
4102 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.G6"_ustr
, m_pDoc
->GetFormula(6, 106, srcSheet
));
4103 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.G7"_ustr
, m_pDoc
->GetFormula(6, 107, srcSheet
));
4104 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.H1"_ustr
, m_pDoc
->GetFormula(7, 101, srcSheet
));
4105 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.H2"_ustr
, m_pDoc
->GetFormula(7, 102, srcSheet
));
4106 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.H3"_ustr
, m_pDoc
->GetFormula(7, 103, srcSheet
));
4107 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.H4"_ustr
, m_pDoc
->GetFormula(7, 104, srcSheet
));
4108 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.H5"_ustr
, m_pDoc
->GetFormula(7, 105, srcSheet
));
4109 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.H6"_ustr
, m_pDoc
->GetFormula(7, 106, srcSheet
));
4110 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.H7"_ustr
, m_pDoc
->GetFormula(7, 107, srcSheet
));
4111 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.I1"_ustr
, m_pDoc
->GetFormula(8, 101, srcSheet
));
4112 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.I2"_ustr
, m_pDoc
->GetFormula(8, 102, srcSheet
));
4113 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.I3"_ustr
, m_pDoc
->GetFormula(8, 103, srcSheet
));
4114 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.I4"_ustr
, m_pDoc
->GetFormula(8, 104, srcSheet
));
4115 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.I5"_ustr
, m_pDoc
->GetFormula(8, 105, srcSheet
));
4116 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.I6"_ustr
, m_pDoc
->GetFormula(8, 106, srcSheet
));
4117 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.I7"_ustr
, m_pDoc
->GetFormula(8, 107, srcSheet
));
4118 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.J1"_ustr
, m_pDoc
->GetFormula(9, 101, srcSheet
));
4119 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.J2"_ustr
, m_pDoc
->GetFormula(9, 102, srcSheet
));
4120 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.J3"_ustr
, m_pDoc
->GetFormula(9, 103, srcSheet
));
4121 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.J4"_ustr
, m_pDoc
->GetFormula(9, 104, srcSheet
));
4122 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.J5"_ustr
, m_pDoc
->GetFormula(9, 105, srcSheet
));
4123 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.J6"_ustr
, m_pDoc
->GetFormula(9, 106, srcSheet
));
4124 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.J7"_ustr
, m_pDoc
->GetFormula(9, 107, srcSheet
));
4126 m_pDoc
->DeleteTab(destSheet
);
4127 m_pDoc
->DeleteTab(srcSheet
);
4130 void TestCopyPaste::checkCopyPasteSpecialMultiRangeCol(bool bSkipEmpty
)
4132 const SCTAB srcSheet
= 0;
4133 const SCTAB destSheet
= 1;
4136 ┌--- not selected src col C
4139 | D | E | F | G | H | I |
4141 2 | 1 B*| =D2+10 *| R1 *| =C2+C4+60 | =SUMIF(C2:C5;"<4") | 121 |
4142 3 | 2 B*| =D3+20 b | R2 *| | *| 122 | <- filtered row
4143 4 | 3 B*| =G4+30 b*| 5 *| B*| | 123 |
4144 5 | 4 | =D3+40 b*| R4 *| =C2+C4+70 *| =D$3+$B$5+80 *| 124 |
4146 * means note attached
4151 const EditTextObject
* pEditObj
;
4153 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(2, 0, destSheet
));
4154 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(2, 1, destSheet
));
4155 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(2, 2, destSheet
));
4156 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(2, 3, destSheet
));
4157 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(2, 4, destSheet
));
4158 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(2, 5, destSheet
));
4160 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(3, 0, destSheet
));
4161 CPPUNIT_ASSERT_EQUAL(1.0, m_pDoc
->GetValue(3, 1, destSheet
));
4162 CPPUNIT_ASSERT_EQUAL(2.0, m_pDoc
->GetValue(3, 2, destSheet
));
4163 CPPUNIT_ASSERT_EQUAL(3.0, m_pDoc
->GetValue(3, 3, destSheet
));
4164 CPPUNIT_ASSERT_EQUAL(4.0, m_pDoc
->GetValue(3, 4, destSheet
));
4165 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(3, 5, destSheet
));
4167 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(4, 0, destSheet
));
4168 CPPUNIT_ASSERT_EQUAL(u
"1000"_ustr
, m_pDoc
->GetString(4, 0, destSheet
));
4169 CPPUNIT_ASSERT_EQUAL(11.0, m_pDoc
->GetValue(4, 1, destSheet
));
4170 CPPUNIT_ASSERT_EQUAL(u
"=D2+10"_ustr
, m_pDoc
->GetFormula(4, 1, destSheet
));
4171 CPPUNIT_ASSERT_EQUAL(u
"=D3+20"_ustr
, m_pDoc
->GetFormula(4, 2, destSheet
));
4172 CPPUNIT_ASSERT_EQUAL(22.0, m_pDoc
->GetValue(4, 2, destSheet
));
4173 CPPUNIT_ASSERT_EQUAL(u
"=G4+30"_ustr
, m_pDoc
->GetFormula(4, 3, destSheet
));
4174 CPPUNIT_ASSERT_EQUAL(bSkipEmpty
? 1030.0 : 30.0,
4175 m_pDoc
->GetValue(4, 3, destSheet
)); // It was 35
4176 CPPUNIT_ASSERT_EQUAL(u
"=D3+40"_ustr
, m_pDoc
->GetFormula(4, 4, destSheet
));
4177 CPPUNIT_ASSERT_EQUAL(42.0, m_pDoc
->GetValue(4, 4, destSheet
));
4178 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(4, 5, destSheet
));
4179 CPPUNIT_ASSERT_EQUAL(u
"1000"_ustr
, m_pDoc
->GetString(4, 5, destSheet
));
4180 // col 5, strings are not selected
4182 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(5, 0, destSheet
));
4183 pEditObj
= m_pDoc
->GetEditText(ScAddress(5, 0, destSheet
));
4184 CPPUNIT_ASSERT(pEditObj
== nullptr);
4185 pEditObj
= m_pDoc
->GetEditText(ScAddress(5, 1, destSheet
));
4186 CPPUNIT_ASSERT(pEditObj
);
4187 CPPUNIT_ASSERT_EQUAL(u
"R1"_ustr
, pEditObj
->GetText(0));
4188 pEditObj
= m_pDoc
->GetEditText(ScAddress(5, 2, destSheet
));
4189 CPPUNIT_ASSERT(pEditObj
);
4190 CPPUNIT_ASSERT_EQUAL(u
"R2"_ustr
, pEditObj
->GetText(0));
4191 CPPUNIT_ASSERT_EQUAL(5.0, m_pDoc
->GetValue(5, 3, destSheet
));
4192 pEditObj
= m_pDoc
->GetEditText(ScAddress(5, 4, destSheet
));
4193 CPPUNIT_ASSERT(pEditObj
);
4194 CPPUNIT_ASSERT_EQUAL(u
"R4"_ustr
, pEditObj
->GetText(0));
4195 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(5, 5, destSheet
));
4196 pEditObj
= m_pDoc
->GetEditText(ScAddress(5, 5, destSheet
));
4197 CPPUNIT_ASSERT(pEditObj
== nullptr);
4199 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(6, 0, destSheet
));
4200 CPPUNIT_ASSERT_EQUAL(u
"1000"_ustr
, m_pDoc
->GetString(6, 0, destSheet
));
4201 CPPUNIT_ASSERT_EQUAL(u
"=C2+C4+60"_ustr
, m_pDoc
->GetFormula(6, 1, destSheet
));
4202 CPPUNIT_ASSERT_EQUAL(2060.0, m_pDoc
->GetValue(6, 1, destSheet
)); // It was 64
4205 CPPUNIT_ASSERT_EQUAL(OUString(), m_pDoc
->GetString(6, 2, destSheet
));
4206 CPPUNIT_ASSERT_EQUAL(OUString(), m_pDoc
->GetString(6, 3, destSheet
));
4210 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(6, 2, destSheet
));
4211 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(6, 3, destSheet
));
4213 CPPUNIT_ASSERT_EQUAL(u
"=C2+C4+70"_ustr
, m_pDoc
->GetFormula(6, 4, destSheet
));
4214 CPPUNIT_ASSERT_EQUAL(2070.0, m_pDoc
->GetValue(6, 4, destSheet
)); // It was 74
4215 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(6, 5, destSheet
));
4216 CPPUNIT_ASSERT_EQUAL(u
"1000"_ustr
, m_pDoc
->GetString(6, 5, destSheet
));
4218 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(7, 0, destSheet
));
4219 CPPUNIT_ASSERT_EQUAL(u
"1000"_ustr
, m_pDoc
->GetString(7, 0, destSheet
));
4220 CPPUNIT_ASSERT_EQUAL(u
"=SUMIF(C2:C5;\"<4\")"_ustr
, m_pDoc
->GetFormula(7, 1, destSheet
));
4221 CPPUNIT_ASSERT_EQUAL(0.0, m_pDoc
->GetValue(7, 1, destSheet
)); // It was 6
4224 CPPUNIT_ASSERT_EQUAL(OUString(), m_pDoc
->GetString(7, 2, destSheet
));
4225 CPPUNIT_ASSERT_EQUAL(OUString(), m_pDoc
->GetString(7, 3, destSheet
));
4229 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(7, 2, destSheet
));
4230 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(7, 3, destSheet
));
4232 CPPUNIT_ASSERT_EQUAL(1082.0, m_pDoc
->GetValue(7, 4, destSheet
));
4233 CPPUNIT_ASSERT_EQUAL(u
"=D$3+$B$5+80"_ustr
, m_pDoc
->GetFormula(7, 4, destSheet
));
4234 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(7, 5, destSheet
));
4235 CPPUNIT_ASSERT_EQUAL(u
"1000"_ustr
, m_pDoc
->GetString(7, 5, destSheet
));
4237 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(8, 0, destSheet
));
4238 CPPUNIT_ASSERT_EQUAL(121.0, m_pDoc
->GetValue(8, 1, destSheet
));
4239 CPPUNIT_ASSERT_EQUAL(122.0, m_pDoc
->GetValue(8, 2, destSheet
));
4240 CPPUNIT_ASSERT_EQUAL(123.0, m_pDoc
->GetValue(8, 3, destSheet
));
4241 CPPUNIT_ASSERT_EQUAL(124.0, m_pDoc
->GetValue(8, 4, destSheet
));
4242 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(8, 5, destSheet
));
4243 // col 9, col repetition is not supported for multi range copy/paste
4244 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(9, 0, destSheet
));
4245 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(9, 1, destSheet
));
4246 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(9, 2, destSheet
));
4247 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(9, 3, destSheet
));
4248 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(9, 4, destSheet
));
4249 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(9, 5, destSheet
));
4252 const SfxPoolItem
* pItem
= nullptr;
4253 m_pDoc
->GetPattern(ScAddress(3, 1, destSheet
))->GetItemSet().HasItem(ATTR_BACKGROUND
, &pItem
);
4254 CPPUNIT_ASSERT(pItem
);
4255 CPPUNIT_ASSERT_EQUAL(COL_BLUE
, static_cast<const SvxBrushItem
*>(pItem
)->GetColor());
4256 m_pDoc
->GetPattern(ScAddress(3, 2, destSheet
))->GetItemSet().HasItem(ATTR_BACKGROUND
, &pItem
);
4257 CPPUNIT_ASSERT(pItem
);
4258 CPPUNIT_ASSERT_EQUAL(COL_BLUE
, static_cast<const SvxBrushItem
*>(pItem
)->GetColor());
4259 m_pDoc
->GetPattern(ScAddress(3, 3, destSheet
))->GetItemSet().HasItem(ATTR_BACKGROUND
, &pItem
);
4260 CPPUNIT_ASSERT_EQUAL(COL_BLUE
, static_cast<const SvxBrushItem
*>(pItem
)->GetColor());
4261 m_pDoc
->GetPattern(ScAddress(3, 4, destSheet
))->GetItemSet().HasItem(ATTR_BACKGROUND
, &pItem
);
4262 CPPUNIT_ASSERT(!pItem
);
4263 m_pDoc
->GetPattern(ScAddress(3, 5, destSheet
))->GetItemSet().HasItem(ATTR_BACKGROUND
, &pItem
);
4264 CPPUNIT_ASSERT(!pItem
);
4265 m_pDoc
->GetPattern(ScAddress(6, 3, destSheet
))->GetItemSet().HasItem(ATTR_BACKGROUND
, &pItem
);
4266 CPPUNIT_ASSERT_EQUAL(bSkipEmpty
, pItem
== nullptr);
4268 CPPUNIT_ASSERT_EQUAL(COL_GREEN
, static_cast<const SvxBrushItem
*>(pItem
)->GetColor());
4270 // check border, left and right borders were transformed to top and bottom borders
4271 pItem
= m_pDoc
->GetAttr(ScAddress(4, 1, destSheet
), ATTR_BORDER
);
4272 CPPUNIT_ASSERT(pItem
);
4273 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetTop());
4274 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetBottom());
4275 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetLeft());
4276 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetRight());
4277 pItem
= m_pDoc
->GetAttr(ScAddress(4, 2, destSheet
), ATTR_BORDER
);
4278 CPPUNIT_ASSERT(pItem
);
4279 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetTop());
4280 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetBottom());
4281 CPPUNIT_ASSERT(static_cast<const SvxBoxItem
*>(pItem
)->GetLeft());
4282 CPPUNIT_ASSERT(static_cast<const SvxBoxItem
*>(pItem
)->GetRight());
4283 pItem
= m_pDoc
->GetAttr(ScAddress(4, 3, destSheet
), ATTR_BORDER
);
4284 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetTop());
4285 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetBottom());
4286 CPPUNIT_ASSERT(static_cast<const SvxBoxItem
*>(pItem
)->GetLeft());
4287 CPPUNIT_ASSERT(static_cast<const SvxBoxItem
*>(pItem
)->GetRight());
4288 pItem
= m_pDoc
->GetAttr(ScAddress(4, 4, destSheet
), ATTR_BORDER
);
4289 CPPUNIT_ASSERT(pItem
);
4290 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetTop());
4291 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetBottom());
4292 CPPUNIT_ASSERT(static_cast<const SvxBoxItem
*>(pItem
)->GetLeft());
4293 CPPUNIT_ASSERT(static_cast<const SvxBoxItem
*>(pItem
)->GetRight());
4294 pItem
= m_pDoc
->GetAttr(ScAddress(4, 5, destSheet
), ATTR_BORDER
);
4295 CPPUNIT_ASSERT(pItem
);
4296 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetTop());
4297 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetBottom());
4298 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetLeft());
4299 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetRight());
4301 // check notes after transposed copy/paste
4302 // check presence of notes
4303 CPPUNIT_ASSERT(!m_pDoc
->HasNote(2, 0, destSheet
));
4304 CPPUNIT_ASSERT(!m_pDoc
->HasNote(3, 0, destSheet
));
4305 CPPUNIT_ASSERT(!m_pDoc
->HasNote(4, 0, destSheet
));
4306 CPPUNIT_ASSERT(!m_pDoc
->HasNote(5, 0, destSheet
));
4307 CPPUNIT_ASSERT(!m_pDoc
->HasNote(6, 0, destSheet
));
4308 CPPUNIT_ASSERT(!m_pDoc
->HasNote(7, 0, destSheet
));
4309 CPPUNIT_ASSERT(!m_pDoc
->HasNote(8, 0, destSheet
));
4310 CPPUNIT_ASSERT(!m_pDoc
->HasNote(2, 1, destSheet
));
4311 CPPUNIT_ASSERT(m_pDoc
->HasNote(3, 1, destSheet
));
4312 CPPUNIT_ASSERT(m_pDoc
->HasNote(4, 1, destSheet
));
4313 CPPUNIT_ASSERT(m_pDoc
->HasNote(5, 1, destSheet
));
4314 CPPUNIT_ASSERT(!m_pDoc
->HasNote(6, 1, destSheet
));
4315 CPPUNIT_ASSERT(!m_pDoc
->HasNote(7, 1, destSheet
));
4316 CPPUNIT_ASSERT(!m_pDoc
->HasNote(8, 1, destSheet
));
4317 CPPUNIT_ASSERT(!m_pDoc
->HasNote(2, 2, destSheet
));
4318 CPPUNIT_ASSERT(m_pDoc
->HasNote(3, 2, destSheet
));
4319 CPPUNIT_ASSERT(!m_pDoc
->HasNote(4, 2, destSheet
));
4320 CPPUNIT_ASSERT(m_pDoc
->HasNote(5, 2, destSheet
));
4321 CPPUNIT_ASSERT(!m_pDoc
->HasNote(6, 2, destSheet
));
4322 CPPUNIT_ASSERT_EQUAL(!bSkipEmpty
, m_pDoc
->HasNote(7, 2, destSheet
));
4323 CPPUNIT_ASSERT(!m_pDoc
->HasNote(8, 2, destSheet
));
4324 CPPUNIT_ASSERT(!m_pDoc
->HasNote(2, 3, destSheet
));
4325 CPPUNIT_ASSERT(m_pDoc
->HasNote(3, 3, destSheet
));
4326 CPPUNIT_ASSERT(m_pDoc
->HasNote(4, 3, destSheet
));
4327 CPPUNIT_ASSERT(m_pDoc
->HasNote(5, 3, destSheet
));
4328 CPPUNIT_ASSERT_EQUAL(!bSkipEmpty
, m_pDoc
->HasNote(6, 3, destSheet
));
4329 CPPUNIT_ASSERT(!m_pDoc
->HasNote(7, 3, destSheet
));
4330 CPPUNIT_ASSERT(!m_pDoc
->HasNote(8, 3, destSheet
));
4331 CPPUNIT_ASSERT(!m_pDoc
->HasNote(2, 4, destSheet
));
4332 CPPUNIT_ASSERT(!m_pDoc
->HasNote(3, 4, destSheet
));
4333 CPPUNIT_ASSERT(m_pDoc
->HasNote(4, 4, destSheet
));
4334 CPPUNIT_ASSERT(m_pDoc
->HasNote(5, 4, destSheet
));
4335 CPPUNIT_ASSERT(m_pDoc
->HasNote(6, 4, destSheet
));
4336 CPPUNIT_ASSERT(m_pDoc
->HasNote(7, 4, destSheet
));
4337 CPPUNIT_ASSERT(!m_pDoc
->HasNote(8, 4, destSheet
));
4338 CPPUNIT_ASSERT(!m_pDoc
->HasNote(2, 5, destSheet
));
4339 CPPUNIT_ASSERT(!m_pDoc
->HasNote(3, 5, destSheet
));
4340 CPPUNIT_ASSERT(!m_pDoc
->HasNote(4, 5, destSheet
));
4341 CPPUNIT_ASSERT(!m_pDoc
->HasNote(5, 5, destSheet
));
4342 CPPUNIT_ASSERT(!m_pDoc
->HasNote(6, 5, destSheet
));
4343 CPPUNIT_ASSERT(!m_pDoc
->HasNote(7, 5, destSheet
));
4344 CPPUNIT_ASSERT(!m_pDoc
->HasNote(8, 5, destSheet
));
4346 // check values of notes
4347 CPPUNIT_ASSERT_EQUAL(u
"Note A1"_ustr
, getNote(3, 1, destSheet
));
4348 CPPUNIT_ASSERT_EQUAL(u
"Note A2"_ustr
, getNote(3, 2, destSheet
));
4349 CPPUNIT_ASSERT_EQUAL(u
"Note A3"_ustr
, getNote(3, 3, destSheet
));
4350 CPPUNIT_ASSERT_EQUAL(u
"Note B1"_ustr
, getNote(4, 1, destSheet
));
4351 CPPUNIT_ASSERT_EQUAL(u
"Note B3"_ustr
, getNote(4, 3, destSheet
));
4352 CPPUNIT_ASSERT_EQUAL(u
"Note D1"_ustr
, getNote(5, 1, destSheet
));
4353 CPPUNIT_ASSERT_EQUAL(u
"Note D2"_ustr
, getNote(5, 2, destSheet
));
4354 CPPUNIT_ASSERT_EQUAL(u
"Note D3"_ustr
, getNote(5, 3, destSheet
));
4356 CPPUNIT_ASSERT_EQUAL(u
"Note E2"_ustr
, getNote(6, 3, destSheet
));
4357 CPPUNIT_ASSERT_EQUAL(u
"Note E4"_ustr
, getNote(6, 4, destSheet
));
4359 CPPUNIT_ASSERT_EQUAL(u
"Note F2"_ustr
, getNote(7, 2, destSheet
));
4360 CPPUNIT_ASSERT_EQUAL(u
"Note F4"_ustr
, getNote(7, 4, destSheet
));
4362 // check row 16 on src sheet, refs to copied/cut range
4363 CPPUNIT_ASSERT_EQUAL(u
"=C5"_ustr
, m_pDoc
->GetFormula(1, 16, srcSheet
));
4364 CPPUNIT_ASSERT_EQUAL(u
"=$C$5"_ustr
, m_pDoc
->GetFormula(2, 16, srcSheet
));
4365 CPPUNIT_ASSERT_EQUAL(u
"=$C5"_ustr
, m_pDoc
->GetFormula(3, 16, srcSheet
));
4366 CPPUNIT_ASSERT_EQUAL(u
"=C$5"_ustr
, m_pDoc
->GetFormula(4, 16, srcSheet
));
4367 CPPUNIT_ASSERT_EQUAL(u
"=SUM(C5:C5)"_ustr
, m_pDoc
->GetFormula(5, 16, srcSheet
));
4368 CPPUNIT_ASSERT_EQUAL(u
"=SUM($C$5:$C$5)"_ustr
, m_pDoc
->GetFormula(6, 16, srcSheet
));
4369 CPPUNIT_ASSERT_EQUAL(u
"=SUM($C5:$C5)"_ustr
, m_pDoc
->GetFormula(7, 16, srcSheet
));
4370 CPPUNIT_ASSERT_EQUAL(u
"=SUM(C$5:C$5)"_ustr
, m_pDoc
->GetFormula(8, 16, srcSheet
));
4371 CPPUNIT_ASSERT_EQUAL(u
"=SUM($B$3:$B$6)"_ustr
, m_pDoc
->GetFormula(9, 16, srcSheet
));
4372 CPPUNIT_ASSERT_EQUAL(u
"=SUM($B$3:$B$10)"_ustr
, m_pDoc
->GetFormula(10, 16, srcSheet
));
4374 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(1, 16, srcSheet
));
4375 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(2, 16, srcSheet
));
4376 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(3, 16, srcSheet
));
4377 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(4, 16, srcSheet
));
4378 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(5, 16, srcSheet
));
4379 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(6, 16, srcSheet
));
4380 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(7, 16, srcSheet
));
4381 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(8, 16, srcSheet
));
4382 CPPUNIT_ASSERT_EQUAL(10.0, m_pDoc
->GetValue(9, 16, srcSheet
));
4383 CPPUNIT_ASSERT_EQUAL(-17.0, m_pDoc
->GetValue(10, 16, srcSheet
));
4385 CPPUNIT_ASSERT_EQUAL(u
"=Range_C5"_ustr
, m_pDoc
->GetFormula(1, 17, srcSheet
));
4386 CPPUNIT_ASSERT_EQUAL(u
"=Range_aCa5"_ustr
, m_pDoc
->GetFormula(2, 17, srcSheet
));
4387 CPPUNIT_ASSERT_EQUAL(u
"=Range_aC5"_ustr
, m_pDoc
->GetFormula(3, 17, srcSheet
));
4388 CPPUNIT_ASSERT_EQUAL(u
"=Range_Ca5"_ustr
, m_pDoc
->GetFormula(4, 17, srcSheet
));
4389 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_C5_C5)"_ustr
, m_pDoc
->GetFormula(5, 17, srcSheet
));
4390 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_aCa5_aCa5)"_ustr
, m_pDoc
->GetFormula(6, 17, srcSheet
));
4391 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_aC5_aC5)"_ustr
, m_pDoc
->GetFormula(7, 17, srcSheet
));
4392 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_Ca5_Ca5)"_ustr
, m_pDoc
->GetFormula(8, 17, srcSheet
));
4393 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_aCa5_aCa8)"_ustr
, m_pDoc
->GetFormula(9, 17, srcSheet
));
4394 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_aCa5_aCa10)"_ustr
, m_pDoc
->GetFormula(10, 17, srcSheet
));
4396 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(1, 17, srcSheet
));
4397 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(2, 17, srcSheet
));
4398 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(3, 17, srcSheet
));
4399 CPPUNIT_ASSERT_EQUAL(5.0, m_pDoc
->GetValue(4, 17, srcSheet
));
4400 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(5, 17, srcSheet
));
4401 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(6, 17, srcSheet
));
4402 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(7, 17, srcSheet
));
4403 CPPUNIT_ASSERT_EQUAL(123.0, m_pDoc
->GetValue(8, 17, srcSheet
));
4404 CPPUNIT_ASSERT_EQUAL(10.0, m_pDoc
->GetValue(9, 17, srcSheet
));
4405 CPPUNIT_ASSERT_EQUAL(-17.0, m_pDoc
->GetValue(10, 17, srcSheet
));
4407 // Existing references to the destination range must not change
4408 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.D1"_ustr
, m_pDoc
->GetFormula(3, 101, srcSheet
));
4409 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.D2"_ustr
, m_pDoc
->GetFormula(3, 102, srcSheet
));
4410 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.D3"_ustr
, m_pDoc
->GetFormula(3, 103, srcSheet
));
4411 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.D4"_ustr
, m_pDoc
->GetFormula(3, 104, srcSheet
));
4412 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.D5"_ustr
, m_pDoc
->GetFormula(3, 105, srcSheet
));
4413 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.D6"_ustr
, m_pDoc
->GetFormula(3, 106, srcSheet
));
4414 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.D7"_ustr
, m_pDoc
->GetFormula(3, 107, srcSheet
));
4415 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.E1"_ustr
, m_pDoc
->GetFormula(4, 101, srcSheet
));
4416 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.E2"_ustr
, m_pDoc
->GetFormula(4, 102, srcSheet
));
4417 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.E3"_ustr
, m_pDoc
->GetFormula(4, 103, srcSheet
));
4418 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.E4"_ustr
, m_pDoc
->GetFormula(4, 104, srcSheet
));
4419 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.E5"_ustr
, m_pDoc
->GetFormula(4, 105, srcSheet
));
4420 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.E6"_ustr
, m_pDoc
->GetFormula(4, 106, srcSheet
));
4421 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.E7"_ustr
, m_pDoc
->GetFormula(4, 107, srcSheet
));
4422 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.F1"_ustr
, m_pDoc
->GetFormula(5, 101, srcSheet
));
4423 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.F2"_ustr
, m_pDoc
->GetFormula(5, 102, srcSheet
));
4424 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.F3"_ustr
, m_pDoc
->GetFormula(5, 103, srcSheet
));
4425 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.F4"_ustr
, m_pDoc
->GetFormula(5, 104, srcSheet
));
4426 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.F5"_ustr
, m_pDoc
->GetFormula(5, 105, srcSheet
));
4427 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.F6"_ustr
, m_pDoc
->GetFormula(5, 106, srcSheet
));
4428 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.F7"_ustr
, m_pDoc
->GetFormula(5, 107, srcSheet
));
4429 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.G1"_ustr
, m_pDoc
->GetFormula(6, 101, srcSheet
));
4430 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.G2"_ustr
, m_pDoc
->GetFormula(6, 102, srcSheet
));
4431 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.G3"_ustr
, m_pDoc
->GetFormula(6, 103, srcSheet
));
4432 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.G4"_ustr
, m_pDoc
->GetFormula(6, 104, srcSheet
));
4433 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.G5"_ustr
, m_pDoc
->GetFormula(6, 105, srcSheet
));
4434 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.G6"_ustr
, m_pDoc
->GetFormula(6, 106, srcSheet
));
4435 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.G7"_ustr
, m_pDoc
->GetFormula(6, 107, srcSheet
));
4436 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.H1"_ustr
, m_pDoc
->GetFormula(7, 101, srcSheet
));
4437 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.H2"_ustr
, m_pDoc
->GetFormula(7, 102, srcSheet
));
4438 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.H3"_ustr
, m_pDoc
->GetFormula(7, 103, srcSheet
));
4439 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.H4"_ustr
, m_pDoc
->GetFormula(7, 104, srcSheet
));
4440 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.H5"_ustr
, m_pDoc
->GetFormula(7, 105, srcSheet
));
4441 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.H6"_ustr
, m_pDoc
->GetFormula(7, 106, srcSheet
));
4442 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.H7"_ustr
, m_pDoc
->GetFormula(7, 107, srcSheet
));
4443 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.I1"_ustr
, m_pDoc
->GetFormula(8, 101, srcSheet
));
4444 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.I2"_ustr
, m_pDoc
->GetFormula(8, 102, srcSheet
));
4445 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.I3"_ustr
, m_pDoc
->GetFormula(8, 103, srcSheet
));
4446 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.I4"_ustr
, m_pDoc
->GetFormula(8, 104, srcSheet
));
4447 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.I5"_ustr
, m_pDoc
->GetFormula(8, 105, srcSheet
));
4448 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.I6"_ustr
, m_pDoc
->GetFormula(8, 106, srcSheet
));
4449 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.I7"_ustr
, m_pDoc
->GetFormula(8, 107, srcSheet
));
4450 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.J1"_ustr
, m_pDoc
->GetFormula(9, 101, srcSheet
));
4451 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.J2"_ustr
, m_pDoc
->GetFormula(9, 102, srcSheet
));
4452 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.J3"_ustr
, m_pDoc
->GetFormula(9, 103, srcSheet
));
4453 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.J4"_ustr
, m_pDoc
->GetFormula(9, 104, srcSheet
));
4454 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.J5"_ustr
, m_pDoc
->GetFormula(9, 105, srcSheet
));
4455 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.J6"_ustr
, m_pDoc
->GetFormula(9, 106, srcSheet
));
4456 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.J7"_ustr
, m_pDoc
->GetFormula(9, 107, srcSheet
));
4458 m_pDoc
->DeleteTab(destSheet
);
4459 m_pDoc
->DeleteTab(srcSheet
);
4462 void TestCopyPaste::checkCopyPasteSpecialMultiRangeColFiltered(bool bSkipEmpty
)
4464 const SCTAB srcSheet
= 0;
4465 const SCTAB destSheet
= 1;
4468 ┌--- not selected src col C
4471 | D | E | F | G | H | I |
4473 2 | 1 B*| =D2+10 *| R1 *| =C2+C4+60 | =SUMIF(C2:C5;"<4") | 121 |
4474 3 | 3 B*| =G4+30 b*| 5 *| B*| | 123 |
4475 4 | 4 | =D2+40 b*| R4 *| =C1+C3+70 *| =D$3+$B$5+80 *| 124 |
4477 * means note attached
4482 const EditTextObject
* pEditObj
;
4484 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(2, 0, destSheet
));
4485 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(2, 1, destSheet
));
4486 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(2, 2, destSheet
));
4487 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(2, 3, destSheet
));
4488 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(2, 4, destSheet
));
4489 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(2, 5, destSheet
));
4491 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(3, 0, destSheet
));
4492 CPPUNIT_ASSERT_EQUAL(1.0, m_pDoc
->GetValue(3, 1, destSheet
));
4493 CPPUNIT_ASSERT_EQUAL(3.0, m_pDoc
->GetValue(3, 2, destSheet
));
4494 CPPUNIT_ASSERT_EQUAL(4.0, m_pDoc
->GetValue(3, 3, destSheet
));
4495 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(3, 4, destSheet
));
4497 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(4, 0, destSheet
));
4498 CPPUNIT_ASSERT_EQUAL(OUString(), m_pDoc
->GetFormula(4, 0, destSheet
));
4499 CPPUNIT_ASSERT_EQUAL(11.0, m_pDoc
->GetValue(4, 1, destSheet
));
4500 CPPUNIT_ASSERT_EQUAL(u
"=D2+10"_ustr
, m_pDoc
->GetFormula(4, 1, destSheet
));
4501 // references over selection gaps are not adjusted
4502 CPPUNIT_ASSERT_EQUAL(u
"=G3+30"_ustr
, m_pDoc
->GetFormula(4, 2, destSheet
));
4503 CPPUNIT_ASSERT_EQUAL(bSkipEmpty
? 1030.0 : 30.0,
4504 m_pDoc
->GetValue(4, 2, destSheet
)); // It was 35
4505 CPPUNIT_ASSERT_EQUAL(u
"=D2+40"_ustr
, m_pDoc
->GetFormula(4, 3, destSheet
));
4506 // was originally 42, not adjusted by filtering
4507 CPPUNIT_ASSERT_EQUAL(41.0, m_pDoc
->GetValue(4, 3, destSheet
));
4508 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(4, 4, destSheet
));
4509 CPPUNIT_ASSERT_EQUAL(OUString(), m_pDoc
->GetFormula(4, 4, destSheet
));
4510 // col 5, strings are not selected
4512 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(5, 0, destSheet
));
4513 pEditObj
= m_pDoc
->GetEditText(ScAddress(5, 0, destSheet
));
4514 CPPUNIT_ASSERT(pEditObj
== nullptr);
4515 pEditObj
= m_pDoc
->GetEditText(ScAddress(5, 1, destSheet
));
4516 CPPUNIT_ASSERT(pEditObj
);
4517 CPPUNIT_ASSERT_EQUAL(u
"R1"_ustr
, pEditObj
->GetText(0));
4518 CPPUNIT_ASSERT_EQUAL(5.0, m_pDoc
->GetValue(5, 2, destSheet
));
4519 pEditObj
= m_pDoc
->GetEditText(ScAddress(5, 3, destSheet
));
4520 CPPUNIT_ASSERT(pEditObj
);
4521 CPPUNIT_ASSERT_EQUAL(u
"R4"_ustr
, pEditObj
->GetText(0));
4522 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(5, 4, destSheet
));
4523 pEditObj
= m_pDoc
->GetEditText(ScAddress(5, 4, destSheet
));
4524 CPPUNIT_ASSERT(pEditObj
== nullptr);
4526 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(6, 0, destSheet
));
4527 CPPUNIT_ASSERT_EQUAL(OUString(), m_pDoc
->GetFormula(6, 0, destSheet
));
4528 CPPUNIT_ASSERT_EQUAL(u
"=C2+C4+60"_ustr
, m_pDoc
->GetFormula(6, 1, destSheet
));
4529 CPPUNIT_ASSERT_EQUAL(2060.0, m_pDoc
->GetValue(6, 1, destSheet
)); // It was 64
4531 CPPUNIT_ASSERT_EQUAL(OUString(), m_pDoc
->GetString(6, 2, destSheet
));
4533 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(6, 2, destSheet
));
4534 CPPUNIT_ASSERT_EQUAL(u
"=C1+C3+70"_ustr
, m_pDoc
->GetFormula(6, 3, destSheet
));
4535 CPPUNIT_ASSERT_EQUAL(2070.0, m_pDoc
->GetValue(6, 3, destSheet
)); // It was 74
4536 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(6, 4, destSheet
));
4537 CPPUNIT_ASSERT_EQUAL(OUString(), m_pDoc
->GetFormula(6, 4, destSheet
));
4539 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(7, 0, destSheet
));
4540 CPPUNIT_ASSERT_EQUAL(OUString(), m_pDoc
->GetFormula(7, 0, destSheet
));
4541 CPPUNIT_ASSERT_EQUAL(u
"=SUMIF(C2:C5;\"<4\")"_ustr
, m_pDoc
->GetFormula(7, 1, destSheet
));
4542 CPPUNIT_ASSERT_EQUAL(0.0, m_pDoc
->GetValue(7, 1, destSheet
)); // It was 6
4544 CPPUNIT_ASSERT_EQUAL(OUString(), m_pDoc
->GetString(7, 2, destSheet
));
4546 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(7, 2, destSheet
));
4547 CPPUNIT_ASSERT_EQUAL(1083.0, m_pDoc
->GetValue(7, 3, destSheet
));
4548 CPPUNIT_ASSERT_EQUAL(u
"=D$3+$B$5+80"_ustr
, m_pDoc
->GetFormula(7, 3, destSheet
));
4549 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(7, 4, destSheet
));
4550 CPPUNIT_ASSERT_EQUAL(OUString(), m_pDoc
->GetFormula(7, 4, destSheet
));
4552 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(8, 0, destSheet
));
4553 CPPUNIT_ASSERT_EQUAL(121.0, m_pDoc
->GetValue(8, 1, destSheet
));
4554 CPPUNIT_ASSERT_EQUAL(123.0, m_pDoc
->GetValue(8, 2, destSheet
));
4555 CPPUNIT_ASSERT_EQUAL(124.0, m_pDoc
->GetValue(8, 3, destSheet
));
4556 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(8, 4, destSheet
));
4557 // col 9, col repetition is not supported for multi range copy/paste
4558 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(9, 0, destSheet
));
4559 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(9, 1, destSheet
));
4560 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(9, 2, destSheet
));
4561 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(9, 3, destSheet
));
4562 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(9, 4, destSheet
));
4563 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(9, 5, destSheet
));
4566 const SfxPoolItem
* pItem
= nullptr;
4567 m_pDoc
->GetPattern(ScAddress(3, 1, destSheet
))->GetItemSet().HasItem(ATTR_BACKGROUND
, &pItem
);
4568 CPPUNIT_ASSERT(pItem
);
4569 CPPUNIT_ASSERT_EQUAL(COL_BLUE
, static_cast<const SvxBrushItem
*>(pItem
)->GetColor());
4570 m_pDoc
->GetPattern(ScAddress(3, 2, destSheet
))->GetItemSet().HasItem(ATTR_BACKGROUND
, &pItem
);
4571 CPPUNIT_ASSERT_EQUAL(COL_BLUE
, static_cast<const SvxBrushItem
*>(pItem
)->GetColor());
4572 m_pDoc
->GetPattern(ScAddress(3, 3, destSheet
))->GetItemSet().HasItem(ATTR_BACKGROUND
, &pItem
);
4573 CPPUNIT_ASSERT(!pItem
);
4574 m_pDoc
->GetPattern(ScAddress(3, 4, destSheet
))->GetItemSet().HasItem(ATTR_BACKGROUND
, &pItem
);
4575 CPPUNIT_ASSERT(!pItem
);
4576 m_pDoc
->GetPattern(ScAddress(6, 2, destSheet
))->GetItemSet().HasItem(ATTR_BACKGROUND
, &pItem
);
4577 CPPUNIT_ASSERT_EQUAL(bSkipEmpty
, pItem
== nullptr);
4579 CPPUNIT_ASSERT_EQUAL(COL_GREEN
, static_cast<const SvxBrushItem
*>(pItem
)->GetColor());
4581 // check border, left and right borders were transformed to top and bottom borders
4582 pItem
= m_pDoc
->GetAttr(ScAddress(4, 1, destSheet
), ATTR_BORDER
);
4583 CPPUNIT_ASSERT(pItem
);
4584 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetTop());
4585 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetBottom());
4586 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetLeft());
4587 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetRight());
4588 pItem
= m_pDoc
->GetAttr(ScAddress(4, 2, destSheet
), ATTR_BORDER
);
4589 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetTop());
4590 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetBottom());
4591 CPPUNIT_ASSERT(static_cast<const SvxBoxItem
*>(pItem
)->GetLeft());
4592 CPPUNIT_ASSERT(static_cast<const SvxBoxItem
*>(pItem
)->GetRight());
4593 pItem
= m_pDoc
->GetAttr(ScAddress(4, 3, destSheet
), ATTR_BORDER
);
4594 CPPUNIT_ASSERT(pItem
);
4595 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetTop());
4596 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetBottom());
4597 CPPUNIT_ASSERT(static_cast<const SvxBoxItem
*>(pItem
)->GetLeft());
4598 CPPUNIT_ASSERT(static_cast<const SvxBoxItem
*>(pItem
)->GetRight());
4599 pItem
= m_pDoc
->GetAttr(ScAddress(4, 4, destSheet
), ATTR_BORDER
);
4600 CPPUNIT_ASSERT(pItem
);
4601 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetTop());
4602 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetBottom());
4603 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetLeft());
4604 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetRight());
4606 // check notes after transposed copy/paste
4607 // check presence of notes
4608 CPPUNIT_ASSERT(!m_pDoc
->HasNote(2, 0, destSheet
));
4609 CPPUNIT_ASSERT(!m_pDoc
->HasNote(3, 0, destSheet
));
4610 CPPUNIT_ASSERT(!m_pDoc
->HasNote(4, 0, destSheet
));
4611 CPPUNIT_ASSERT(!m_pDoc
->HasNote(5, 0, destSheet
));
4612 CPPUNIT_ASSERT(!m_pDoc
->HasNote(6, 0, destSheet
));
4613 CPPUNIT_ASSERT(!m_pDoc
->HasNote(7, 0, destSheet
));
4614 CPPUNIT_ASSERT(!m_pDoc
->HasNote(8, 0, destSheet
));
4615 CPPUNIT_ASSERT(!m_pDoc
->HasNote(2, 1, destSheet
));
4616 CPPUNIT_ASSERT(m_pDoc
->HasNote(3, 1, destSheet
));
4617 CPPUNIT_ASSERT(m_pDoc
->HasNote(4, 1, destSheet
));
4618 CPPUNIT_ASSERT(m_pDoc
->HasNote(5, 1, destSheet
));
4619 CPPUNIT_ASSERT(!m_pDoc
->HasNote(6, 1, destSheet
));
4620 CPPUNIT_ASSERT(!m_pDoc
->HasNote(7, 1, destSheet
));
4621 CPPUNIT_ASSERT(!m_pDoc
->HasNote(8, 1, destSheet
));
4622 CPPUNIT_ASSERT(!m_pDoc
->HasNote(2, 2, destSheet
));
4623 CPPUNIT_ASSERT(m_pDoc
->HasNote(3, 2, destSheet
));
4624 CPPUNIT_ASSERT(m_pDoc
->HasNote(4, 2, destSheet
));
4625 CPPUNIT_ASSERT(m_pDoc
->HasNote(5, 2, destSheet
));
4626 CPPUNIT_ASSERT_EQUAL(!bSkipEmpty
, m_pDoc
->HasNote(6, 2, destSheet
));
4627 CPPUNIT_ASSERT(!m_pDoc
->HasNote(7, 2, destSheet
));
4628 CPPUNIT_ASSERT(!m_pDoc
->HasNote(8, 2, destSheet
));
4629 CPPUNIT_ASSERT(!m_pDoc
->HasNote(2, 3, destSheet
));
4630 CPPUNIT_ASSERT(!m_pDoc
->HasNote(3, 3, destSheet
));
4631 CPPUNIT_ASSERT(m_pDoc
->HasNote(4, 3, destSheet
));
4632 CPPUNIT_ASSERT(m_pDoc
->HasNote(5, 3, destSheet
));
4633 CPPUNIT_ASSERT(m_pDoc
->HasNote(6, 3, destSheet
));
4634 CPPUNIT_ASSERT(m_pDoc
->HasNote(7, 3, destSheet
));
4635 CPPUNIT_ASSERT(!m_pDoc
->HasNote(8, 3, destSheet
));
4636 CPPUNIT_ASSERT(!m_pDoc
->HasNote(2, 4, destSheet
));
4637 CPPUNIT_ASSERT(!m_pDoc
->HasNote(3, 4, destSheet
));
4638 CPPUNIT_ASSERT(!m_pDoc
->HasNote(4, 4, destSheet
));
4639 CPPUNIT_ASSERT(!m_pDoc
->HasNote(5, 4, destSheet
));
4640 CPPUNIT_ASSERT(!m_pDoc
->HasNote(6, 4, destSheet
));
4641 CPPUNIT_ASSERT(!m_pDoc
->HasNote(7, 4, destSheet
));
4642 CPPUNIT_ASSERT(!m_pDoc
->HasNote(8, 4, destSheet
));
4644 // check values of notes
4645 CPPUNIT_ASSERT_EQUAL(u
"Note A1"_ustr
, getNote(3, 1, destSheet
));
4646 CPPUNIT_ASSERT_EQUAL(u
"Note A3"_ustr
, getNote(3, 2, destSheet
));
4647 CPPUNIT_ASSERT_EQUAL(u
"Note B1"_ustr
, getNote(4, 1, destSheet
));
4648 CPPUNIT_ASSERT_EQUAL(u
"Note B3"_ustr
, getNote(4, 2, destSheet
));
4649 CPPUNIT_ASSERT_EQUAL(u
"Note D1"_ustr
, getNote(5, 1, destSheet
));
4650 CPPUNIT_ASSERT_EQUAL(u
"Note D3"_ustr
, getNote(5, 2, destSheet
));
4652 CPPUNIT_ASSERT_EQUAL(u
"Note E2"_ustr
, getNote(6, 2, destSheet
));
4653 CPPUNIT_ASSERT_EQUAL(u
"Note E4"_ustr
, getNote(6, 3, destSheet
));
4654 CPPUNIT_ASSERT_EQUAL(u
"Note F4"_ustr
, getNote(7, 3, destSheet
));
4656 // check row 16 on src sheet, refs to copied/cut range
4657 CPPUNIT_ASSERT_EQUAL(u
"=C5"_ustr
, m_pDoc
->GetFormula(1, 16, srcSheet
));
4658 CPPUNIT_ASSERT_EQUAL(u
"=$C$5"_ustr
, m_pDoc
->GetFormula(2, 16, srcSheet
));
4659 CPPUNIT_ASSERT_EQUAL(u
"=$C5"_ustr
, m_pDoc
->GetFormula(3, 16, srcSheet
));
4660 CPPUNIT_ASSERT_EQUAL(u
"=C$5"_ustr
, m_pDoc
->GetFormula(4, 16, srcSheet
));
4661 CPPUNIT_ASSERT_EQUAL(u
"=SUM(C5:C5)"_ustr
, m_pDoc
->GetFormula(5, 16, srcSheet
));
4662 CPPUNIT_ASSERT_EQUAL(u
"=SUM($C$5:$C$5)"_ustr
, m_pDoc
->GetFormula(6, 16, srcSheet
));
4663 CPPUNIT_ASSERT_EQUAL(u
"=SUM($C5:$C5)"_ustr
, m_pDoc
->GetFormula(7, 16, srcSheet
));
4664 CPPUNIT_ASSERT_EQUAL(u
"=SUM(C$5:C$5)"_ustr
, m_pDoc
->GetFormula(8, 16, srcSheet
));
4665 CPPUNIT_ASSERT_EQUAL(u
"=SUM($B$3:$B$6)"_ustr
, m_pDoc
->GetFormula(9, 16, srcSheet
));
4666 CPPUNIT_ASSERT_EQUAL(u
"=SUM($B$3:$B$10)"_ustr
, m_pDoc
->GetFormula(10, 16, srcSheet
));
4668 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(1, 16, srcSheet
));
4669 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(2, 16, srcSheet
));
4670 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(3, 16, srcSheet
));
4671 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(4, 16, srcSheet
));
4672 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(5, 16, srcSheet
));
4673 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(6, 16, srcSheet
));
4674 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(7, 16, srcSheet
));
4675 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(8, 16, srcSheet
));
4676 CPPUNIT_ASSERT_EQUAL(10.0, m_pDoc
->GetValue(9, 16, srcSheet
));
4677 CPPUNIT_ASSERT_EQUAL(-17.0, m_pDoc
->GetValue(10, 16, srcSheet
));
4679 CPPUNIT_ASSERT_EQUAL(u
"=Range_C5"_ustr
, m_pDoc
->GetFormula(1, 17, srcSheet
));
4680 CPPUNIT_ASSERT_EQUAL(u
"=Range_aCa5"_ustr
, m_pDoc
->GetFormula(2, 17, srcSheet
));
4681 CPPUNIT_ASSERT_EQUAL(u
"=Range_aC5"_ustr
, m_pDoc
->GetFormula(3, 17, srcSheet
));
4682 CPPUNIT_ASSERT_EQUAL(u
"=Range_Ca5"_ustr
, m_pDoc
->GetFormula(4, 17, srcSheet
));
4683 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_C5_C5)"_ustr
, m_pDoc
->GetFormula(5, 17, srcSheet
));
4684 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_aCa5_aCa5)"_ustr
, m_pDoc
->GetFormula(6, 17, srcSheet
));
4685 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_aC5_aC5)"_ustr
, m_pDoc
->GetFormula(7, 17, srcSheet
));
4686 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_Ca5_Ca5)"_ustr
, m_pDoc
->GetFormula(8, 17, srcSheet
));
4687 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_aCa5_aCa8)"_ustr
, m_pDoc
->GetFormula(9, 17, srcSheet
));
4688 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_aCa5_aCa10)"_ustr
, m_pDoc
->GetFormula(10, 17, srcSheet
));
4690 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(1, 17, srcSheet
));
4691 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(2, 17, srcSheet
));
4692 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(3, 17, srcSheet
));
4693 CPPUNIT_ASSERT_EQUAL(5.0, m_pDoc
->GetValue(4, 17, srcSheet
));
4694 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(5, 17, srcSheet
));
4695 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(6, 17, srcSheet
));
4696 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(7, 17, srcSheet
));
4697 CPPUNIT_ASSERT_EQUAL(123.0, m_pDoc
->GetValue(8, 17, srcSheet
));
4698 CPPUNIT_ASSERT_EQUAL(10.0, m_pDoc
->GetValue(9, 17, srcSheet
));
4699 CPPUNIT_ASSERT_EQUAL(-17.0, m_pDoc
->GetValue(10, 17, srcSheet
));
4701 // Existing references to the destination range must not change
4702 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.D1"_ustr
, m_pDoc
->GetFormula(3, 101, srcSheet
));
4703 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.D2"_ustr
, m_pDoc
->GetFormula(3, 102, srcSheet
));
4704 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.D3"_ustr
, m_pDoc
->GetFormula(3, 103, srcSheet
));
4705 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.D4"_ustr
, m_pDoc
->GetFormula(3, 104, srcSheet
));
4706 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.D5"_ustr
, m_pDoc
->GetFormula(3, 105, srcSheet
));
4707 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.D6"_ustr
, m_pDoc
->GetFormula(3, 106, srcSheet
));
4708 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.D7"_ustr
, m_pDoc
->GetFormula(3, 107, srcSheet
));
4709 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.E1"_ustr
, m_pDoc
->GetFormula(4, 101, srcSheet
));
4710 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.E2"_ustr
, m_pDoc
->GetFormula(4, 102, srcSheet
));
4711 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.E3"_ustr
, m_pDoc
->GetFormula(4, 103, srcSheet
));
4712 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.E4"_ustr
, m_pDoc
->GetFormula(4, 104, srcSheet
));
4713 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.E5"_ustr
, m_pDoc
->GetFormula(4, 105, srcSheet
));
4714 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.E6"_ustr
, m_pDoc
->GetFormula(4, 106, srcSheet
));
4715 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.E7"_ustr
, m_pDoc
->GetFormula(4, 107, srcSheet
));
4716 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.F1"_ustr
, m_pDoc
->GetFormula(5, 101, srcSheet
));
4717 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.F2"_ustr
, m_pDoc
->GetFormula(5, 102, srcSheet
));
4718 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.F3"_ustr
, m_pDoc
->GetFormula(5, 103, srcSheet
));
4719 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.F4"_ustr
, m_pDoc
->GetFormula(5, 104, srcSheet
));
4720 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.F5"_ustr
, m_pDoc
->GetFormula(5, 105, srcSheet
));
4721 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.F6"_ustr
, m_pDoc
->GetFormula(5, 106, srcSheet
));
4722 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.F7"_ustr
, m_pDoc
->GetFormula(5, 107, srcSheet
));
4723 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.G1"_ustr
, m_pDoc
->GetFormula(6, 101, srcSheet
));
4724 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.G2"_ustr
, m_pDoc
->GetFormula(6, 102, srcSheet
));
4725 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.G3"_ustr
, m_pDoc
->GetFormula(6, 103, srcSheet
));
4726 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.G4"_ustr
, m_pDoc
->GetFormula(6, 104, srcSheet
));
4727 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.G5"_ustr
, m_pDoc
->GetFormula(6, 105, srcSheet
));
4728 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.G6"_ustr
, m_pDoc
->GetFormula(6, 106, srcSheet
));
4729 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.G7"_ustr
, m_pDoc
->GetFormula(6, 107, srcSheet
));
4730 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.H1"_ustr
, m_pDoc
->GetFormula(7, 101, srcSheet
));
4731 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.H2"_ustr
, m_pDoc
->GetFormula(7, 102, srcSheet
));
4732 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.H3"_ustr
, m_pDoc
->GetFormula(7, 103, srcSheet
));
4733 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.H4"_ustr
, m_pDoc
->GetFormula(7, 104, srcSheet
));
4734 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.H5"_ustr
, m_pDoc
->GetFormula(7, 105, srcSheet
));
4735 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.H6"_ustr
, m_pDoc
->GetFormula(7, 106, srcSheet
));
4736 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.H7"_ustr
, m_pDoc
->GetFormula(7, 107, srcSheet
));
4737 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.I1"_ustr
, m_pDoc
->GetFormula(8, 101, srcSheet
));
4738 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.I2"_ustr
, m_pDoc
->GetFormula(8, 102, srcSheet
));
4739 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.I3"_ustr
, m_pDoc
->GetFormula(8, 103, srcSheet
));
4740 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.I4"_ustr
, m_pDoc
->GetFormula(8, 104, srcSheet
));
4741 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.I5"_ustr
, m_pDoc
->GetFormula(8, 105, srcSheet
));
4742 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.I6"_ustr
, m_pDoc
->GetFormula(8, 106, srcSheet
));
4743 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.I7"_ustr
, m_pDoc
->GetFormula(8, 107, srcSheet
));
4744 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.J1"_ustr
, m_pDoc
->GetFormula(9, 101, srcSheet
));
4745 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.J2"_ustr
, m_pDoc
->GetFormula(9, 102, srcSheet
));
4746 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.J3"_ustr
, m_pDoc
->GetFormula(9, 103, srcSheet
));
4747 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.J4"_ustr
, m_pDoc
->GetFormula(9, 104, srcSheet
));
4748 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.J5"_ustr
, m_pDoc
->GetFormula(9, 105, srcSheet
));
4749 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.J6"_ustr
, m_pDoc
->GetFormula(9, 106, srcSheet
));
4750 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.J7"_ustr
, m_pDoc
->GetFormula(9, 107, srcSheet
));
4752 m_pDoc
->DeleteTab(destSheet
);
4753 m_pDoc
->DeleteTab(srcSheet
);
4756 void TestCopyPaste::checkCopyPasteSpecialMultiRangeColTranspose(bool bSkipEmpty
)
4758 const SCTAB srcSheet
= 0;
4759 const SCTAB destSheet
= 1;
4764 2 | 1 B*| 2 B*| 3 B*| 4 |
4765 3 | =D2+10 *| =E2+20 b | =F5+30 b*| =E2+40 b*|
4766 4 | R1 *| R2 *| 5 *| R4 *|
4767 5 | =D1+F1+60 | | B*| =D1+F1+70 *|
4768 6 | =SUMIF(D1:G1;"<4") | *| | =C$3+$B$5+80 *|
4769 7 | 121 | 122 | 123 | 124 |
4771 * means note attached
4776 // check cell content after transposed copy/paste of filtered data
4777 // Col C and G are checked to be empty
4778 const EditTextObject
* pEditObj
;
4780 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(2, 0, destSheet
));
4781 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(3, 0, destSheet
));
4782 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(4, 0, destSheet
));
4783 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(5, 0, destSheet
));
4784 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(6, 0, destSheet
));
4785 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(7, 0, destSheet
));
4787 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(2, 1, destSheet
));
4788 CPPUNIT_ASSERT_EQUAL(1.0, m_pDoc
->GetValue(3, 1, destSheet
));
4789 CPPUNIT_ASSERT_EQUAL(2.0, m_pDoc
->GetValue(4, 1, destSheet
));
4790 CPPUNIT_ASSERT_EQUAL(3.0, m_pDoc
->GetValue(5, 1, destSheet
));
4791 CPPUNIT_ASSERT_EQUAL(4.0, m_pDoc
->GetValue(6, 1, destSheet
));
4792 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(7, 1, destSheet
));
4794 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(2, 2, destSheet
));
4795 CPPUNIT_ASSERT_EQUAL(u
"1000"_ustr
, m_pDoc
->GetString(2, 2, destSheet
));
4796 CPPUNIT_ASSERT_EQUAL(11.0, m_pDoc
->GetValue(3, 2, destSheet
));
4797 CPPUNIT_ASSERT_EQUAL(u
"=D2+10"_ustr
, m_pDoc
->GetFormula(3, 2, destSheet
));
4798 CPPUNIT_ASSERT_EQUAL(u
"=E2+20"_ustr
, m_pDoc
->GetFormula(4, 2, destSheet
));
4799 CPPUNIT_ASSERT_EQUAL(22.0, m_pDoc
->GetValue(4, 2, destSheet
));
4800 CPPUNIT_ASSERT_EQUAL(u
"=F5+30"_ustr
, m_pDoc
->GetFormula(5, 2, destSheet
));
4801 CPPUNIT_ASSERT_EQUAL(bSkipEmpty
? 1030.0 : 30.0,
4802 m_pDoc
->GetValue(5, 2, destSheet
)); // It was 35
4803 CPPUNIT_ASSERT_EQUAL(u
"=E2+40"_ustr
, m_pDoc
->GetFormula(6, 2, destSheet
));
4804 CPPUNIT_ASSERT_EQUAL(42.0, m_pDoc
->GetValue(6, 2, destSheet
));
4805 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(7, 2, destSheet
));
4806 CPPUNIT_ASSERT_EQUAL(u
"1000"_ustr
, m_pDoc
->GetString(7, 2, destSheet
));
4807 // row 3, strings was not selected in multi range selection
4809 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(2, 3, destSheet
));
4810 pEditObj
= m_pDoc
->GetEditText(ScAddress(2, 3, destSheet
));
4811 CPPUNIT_ASSERT(pEditObj
== nullptr);
4812 pEditObj
= m_pDoc
->GetEditText(ScAddress(3, 3, destSheet
));
4813 CPPUNIT_ASSERT(pEditObj
);
4814 CPPUNIT_ASSERT_EQUAL(u
"R1"_ustr
, pEditObj
->GetText(0));
4815 pEditObj
= m_pDoc
->GetEditText(ScAddress(4, 3, destSheet
));
4816 CPPUNIT_ASSERT(pEditObj
);
4817 CPPUNIT_ASSERT_EQUAL(u
"R2"_ustr
, pEditObj
->GetText(0));
4818 CPPUNIT_ASSERT_EQUAL(5.0, m_pDoc
->GetValue(5, 3, destSheet
));
4819 pEditObj
= m_pDoc
->GetEditText(ScAddress(6, 3, destSheet
));
4820 CPPUNIT_ASSERT(pEditObj
);
4821 CPPUNIT_ASSERT_EQUAL(u
"R4"_ustr
, pEditObj
->GetText(0));
4822 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(7, 3, destSheet
));
4823 pEditObj
= m_pDoc
->GetEditText(ScAddress(7, 3, destSheet
));
4824 CPPUNIT_ASSERT(pEditObj
== nullptr);
4826 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(2, 4, destSheet
));
4827 CPPUNIT_ASSERT_EQUAL(u
"1000"_ustr
, m_pDoc
->GetString(2, 4, destSheet
));
4828 CPPUNIT_ASSERT_EQUAL(u
"=D1+F1+60"_ustr
, m_pDoc
->GetFormula(3, 4, destSheet
));
4829 CPPUNIT_ASSERT_EQUAL(2060.0, m_pDoc
->GetValue(3, 4, destSheet
)); // It was 64
4832 CPPUNIT_ASSERT_EQUAL_MESSAGE("Cell E5", OUString(), m_pDoc
->GetString(4, 4, destSheet
));
4833 CPPUNIT_ASSERT_EQUAL_MESSAGE("Cell E5", OUString(), m_pDoc
->GetString(5, 4, destSheet
));
4837 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(4, 4, destSheet
));
4838 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(5, 4, destSheet
));
4840 CPPUNIT_ASSERT_EQUAL(u
"=D1+F1+70"_ustr
, m_pDoc
->GetFormula(6, 4, destSheet
));
4841 CPPUNIT_ASSERT_EQUAL(2070.0, m_pDoc
->GetValue(6, 4, destSheet
)); // It was 74
4842 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(7, 4, destSheet
));
4843 CPPUNIT_ASSERT_EQUAL(u
"1000"_ustr
, m_pDoc
->GetString(7, 4, destSheet
));
4845 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(2, 5, destSheet
));
4846 CPPUNIT_ASSERT_EQUAL(u
"1000"_ustr
, m_pDoc
->GetString(2, 5, destSheet
));
4847 CPPUNIT_ASSERT_EQUAL(u
"=SUMIF(D1:G1;\"<4\")"_ustr
, m_pDoc
->GetFormula(3, 5, destSheet
));
4848 CPPUNIT_ASSERT_EQUAL(0.0, m_pDoc
->GetValue(3, 5, destSheet
)); // It was 6
4851 CPPUNIT_ASSERT_EQUAL_MESSAGE("Cell E6", OUString(), m_pDoc
->GetString(4, 5, destSheet
));
4852 CPPUNIT_ASSERT_EQUAL_MESSAGE("Cell E6", OUString(), m_pDoc
->GetString(5, 5, destSheet
));
4856 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(4, 5, destSheet
));
4857 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(5, 5, destSheet
));
4860 CPPUNIT_ASSERT_EQUAL(u
"=C$3+$B$5+80"_ustr
, m_pDoc
->GetFormula(6, 5, destSheet
));
4861 CPPUNIT_ASSERT_EQUAL(2080.0, m_pDoc
->GetValue(6, 5, destSheet
));
4862 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(7, 5, destSheet
));
4863 CPPUNIT_ASSERT_EQUAL(u
"1000"_ustr
, m_pDoc
->GetString(7, 5, destSheet
));
4865 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(2, 6, destSheet
));
4866 CPPUNIT_ASSERT_EQUAL(121.0, m_pDoc
->GetValue(3, 6, destSheet
));
4867 CPPUNIT_ASSERT_EQUAL(122.0, m_pDoc
->GetValue(4, 6, destSheet
));
4868 CPPUNIT_ASSERT_EQUAL(123.0, m_pDoc
->GetValue(5, 6, destSheet
));
4869 CPPUNIT_ASSERT_EQUAL(124.0, m_pDoc
->GetValue(6, 6, destSheet
));
4870 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(7, 6, destSheet
));
4871 // row 7, not selected
4872 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(2, 7, destSheet
));
4873 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(3, 7, destSheet
));
4874 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(4, 7, destSheet
));
4875 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(5, 7, destSheet
));
4876 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(6, 7, destSheet
));
4877 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(7, 7, destSheet
));
4880 const SfxPoolItem
* pItem
= nullptr;
4881 m_pDoc
->GetPattern(ScAddress(3, 1, destSheet
))->GetItemSet().HasItem(ATTR_BACKGROUND
, &pItem
);
4882 CPPUNIT_ASSERT(pItem
);
4883 CPPUNIT_ASSERT_EQUAL(COL_BLUE
, static_cast<const SvxBrushItem
*>(pItem
)->GetColor());
4884 m_pDoc
->GetPattern(ScAddress(4, 1, destSheet
))->GetItemSet().HasItem(ATTR_BACKGROUND
, &pItem
);
4885 CPPUNIT_ASSERT(pItem
);
4886 CPPUNIT_ASSERT_EQUAL(COL_BLUE
, static_cast<const SvxBrushItem
*>(pItem
)->GetColor());
4887 m_pDoc
->GetPattern(ScAddress(5, 1, destSheet
))->GetItemSet().HasItem(ATTR_BACKGROUND
, &pItem
);
4888 CPPUNIT_ASSERT(pItem
);
4889 CPPUNIT_ASSERT_EQUAL(COL_BLUE
, static_cast<const SvxBrushItem
*>(pItem
)->GetColor());
4890 m_pDoc
->GetPattern(ScAddress(6, 1, destSheet
))->GetItemSet().HasItem(ATTR_BACKGROUND
, &pItem
);
4891 CPPUNIT_ASSERT(!pItem
);
4892 m_pDoc
->GetPattern(ScAddress(7, 1, destSheet
))->GetItemSet().HasItem(ATTR_BACKGROUND
, &pItem
);
4893 CPPUNIT_ASSERT(!pItem
);
4894 m_pDoc
->GetPattern(ScAddress(5, 4, destSheet
))->GetItemSet().HasItem(ATTR_BACKGROUND
, &pItem
);
4895 CPPUNIT_ASSERT_EQUAL(bSkipEmpty
, pItem
== nullptr);
4896 // std::cout << "bSkipEmpty: " << bSkipEmpty << ", pItem == nullptr: " << (pItem == nullptr) << std::endl;
4898 CPPUNIT_ASSERT_EQUAL(COL_GREEN
, static_cast<const SvxBrushItem
*>(pItem
)->GetColor());
4900 // check border, left and right borders were transformed to top and bottom borders
4901 pItem
= m_pDoc
->GetAttr(ScAddress(3, 2, destSheet
), ATTR_BORDER
);
4902 CPPUNIT_ASSERT(pItem
);
4903 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetTop());
4904 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetBottom());
4905 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetLeft());
4906 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetRight());
4908 m_pDoc
->GetPattern(ScAddress(4, 2, destSheet
))->GetItemSet().HasItem(ATTR_BORDER
, &pItem
);
4909 CPPUNIT_ASSERT(pItem
);
4910 CPPUNIT_ASSERT(static_cast<const SvxBoxItem
*>(pItem
)->GetTop());
4911 pItem
= m_pDoc
->GetAttr(ScAddress(4, 2, destSheet
), ATTR_BORDER
);
4912 CPPUNIT_ASSERT(pItem
);
4913 CPPUNIT_ASSERT(static_cast<const SvxBoxItem
*>(pItem
)->GetTop());
4914 CPPUNIT_ASSERT(static_cast<const SvxBoxItem
*>(pItem
)->GetBottom());
4915 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetLeft());
4916 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetRight());
4917 pItem
= m_pDoc
->GetAttr(ScAddress(5, 2, destSheet
), ATTR_BORDER
);
4918 CPPUNIT_ASSERT(pItem
);
4919 CPPUNIT_ASSERT(static_cast<const SvxBoxItem
*>(pItem
)->GetTop());
4920 CPPUNIT_ASSERT(static_cast<const SvxBoxItem
*>(pItem
)->GetBottom());
4921 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetLeft());
4922 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetRight());
4923 pItem
= m_pDoc
->GetAttr(ScAddress(6, 2, destSheet
), ATTR_BORDER
);
4924 CPPUNIT_ASSERT(static_cast<const SvxBoxItem
*>(pItem
)->GetTop());
4925 CPPUNIT_ASSERT(static_cast<const SvxBoxItem
*>(pItem
)->GetBottom());
4926 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetLeft());
4927 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetRight());
4928 pItem
= m_pDoc
->GetAttr(ScAddress(7, 2, destSheet
), ATTR_BORDER
);
4929 CPPUNIT_ASSERT(pItem
);
4930 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetTop());
4931 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetBottom());
4932 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetLeft());
4933 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetRight());
4935 // check notes after transposed copy/paste
4936 // check presence of notes
4937 CPPUNIT_ASSERT(!m_pDoc
->HasNote(2, 0, destSheet
));
4938 CPPUNIT_ASSERT(!m_pDoc
->HasNote(3, 0, destSheet
));
4939 CPPUNIT_ASSERT(!m_pDoc
->HasNote(4, 0, destSheet
));
4940 CPPUNIT_ASSERT(!m_pDoc
->HasNote(5, 0, destSheet
));
4941 CPPUNIT_ASSERT(!m_pDoc
->HasNote(6, 0, destSheet
));
4942 CPPUNIT_ASSERT(!m_pDoc
->HasNote(7, 0, destSheet
));
4943 CPPUNIT_ASSERT(!m_pDoc
->HasNote(2, 1, destSheet
));
4944 CPPUNIT_ASSERT(m_pDoc
->HasNote(3, 1, destSheet
));
4945 CPPUNIT_ASSERT(m_pDoc
->HasNote(4, 1, destSheet
));
4946 CPPUNIT_ASSERT(m_pDoc
->HasNote(5, 1, destSheet
));
4947 CPPUNIT_ASSERT(!m_pDoc
->HasNote(6, 1, destSheet
));
4948 CPPUNIT_ASSERT(!m_pDoc
->HasNote(7, 1, destSheet
));
4949 CPPUNIT_ASSERT(!m_pDoc
->HasNote(2, 2, destSheet
));
4950 CPPUNIT_ASSERT(m_pDoc
->HasNote(3, 2, destSheet
));
4951 CPPUNIT_ASSERT(!m_pDoc
->HasNote(4, 2, destSheet
));
4952 CPPUNIT_ASSERT(m_pDoc
->HasNote(5, 2, destSheet
));
4953 CPPUNIT_ASSERT(m_pDoc
->HasNote(6, 2, destSheet
));
4954 CPPUNIT_ASSERT(!m_pDoc
->HasNote(7, 2, destSheet
));
4955 CPPUNIT_ASSERT(!m_pDoc
->HasNote(2, 3, destSheet
));
4956 CPPUNIT_ASSERT(m_pDoc
->HasNote(3, 3, destSheet
));
4957 CPPUNIT_ASSERT(m_pDoc
->HasNote(4, 3, destSheet
));
4958 CPPUNIT_ASSERT(m_pDoc
->HasNote(5, 3, destSheet
));
4959 CPPUNIT_ASSERT(m_pDoc
->HasNote(6, 3, destSheet
));
4960 CPPUNIT_ASSERT(!m_pDoc
->HasNote(7, 3, destSheet
));
4961 CPPUNIT_ASSERT(!m_pDoc
->HasNote(2, 4, destSheet
));
4962 CPPUNIT_ASSERT(!m_pDoc
->HasNote(3, 4, destSheet
));
4963 CPPUNIT_ASSERT(!m_pDoc
->HasNote(4, 4, destSheet
));
4964 CPPUNIT_ASSERT_EQUAL(!bSkipEmpty
, m_pDoc
->HasNote(5, 4, destSheet
));
4965 CPPUNIT_ASSERT(m_pDoc
->HasNote(6, 4, destSheet
));
4966 CPPUNIT_ASSERT(!m_pDoc
->HasNote(7, 4, destSheet
));
4967 CPPUNIT_ASSERT(!m_pDoc
->HasNote(2, 5, destSheet
));
4968 CPPUNIT_ASSERT(!m_pDoc
->HasNote(3, 5, destSheet
));
4969 CPPUNIT_ASSERT_EQUAL(!bSkipEmpty
, m_pDoc
->HasNote(4, 5, destSheet
));
4970 CPPUNIT_ASSERT(!m_pDoc
->HasNote(5, 5, destSheet
));
4971 CPPUNIT_ASSERT(m_pDoc
->HasNote(6, 5, destSheet
));
4972 CPPUNIT_ASSERT(!m_pDoc
->HasNote(7, 5, destSheet
));
4973 CPPUNIT_ASSERT(!m_pDoc
->HasNote(2, 6, destSheet
));
4974 CPPUNIT_ASSERT(!m_pDoc
->HasNote(3, 6, destSheet
));
4975 CPPUNIT_ASSERT(!m_pDoc
->HasNote(4, 6, destSheet
));
4976 CPPUNIT_ASSERT(!m_pDoc
->HasNote(5, 6, destSheet
));
4977 CPPUNIT_ASSERT(!m_pDoc
->HasNote(6, 6, destSheet
));
4978 CPPUNIT_ASSERT(!m_pDoc
->HasNote(7, 6, destSheet
));
4980 CPPUNIT_ASSERT_EQUAL(u
"Note A1"_ustr
, getNote(3, 1, destSheet
));
4981 CPPUNIT_ASSERT_EQUAL(u
"Note A2"_ustr
, getNote(4, 1, destSheet
));
4982 CPPUNIT_ASSERT_EQUAL(u
"Note A3"_ustr
, getNote(5, 1, destSheet
));
4983 CPPUNIT_ASSERT_EQUAL(u
"Note B1"_ustr
, getNote(3, 2, destSheet
));
4984 CPPUNIT_ASSERT_EQUAL(u
"Note B3"_ustr
, getNote(5, 2, destSheet
));
4985 CPPUNIT_ASSERT_EQUAL(u
"Note D1"_ustr
, getNote(3, 3, destSheet
));
4986 CPPUNIT_ASSERT_EQUAL(u
"Note D2"_ustr
, getNote(4, 3, destSheet
));
4987 CPPUNIT_ASSERT_EQUAL(u
"Note D3"_ustr
, getNote(5, 3, destSheet
));
4989 CPPUNIT_ASSERT_EQUAL(u
"Note E2"_ustr
, getNote(5, 4, destSheet
));
4990 CPPUNIT_ASSERT_EQUAL(u
"Note E4"_ustr
, getNote(6, 4, destSheet
));
4992 CPPUNIT_ASSERT_EQUAL(u
"Note F2"_ustr
, getNote(4, 5, destSheet
));
4993 CPPUNIT_ASSERT_EQUAL(u
"Note F4"_ustr
, getNote(6, 5, destSheet
));
4995 // check row 16 on src sheet, refs to copied/cut range
4996 CPPUNIT_ASSERT_EQUAL(u
"=C5"_ustr
, m_pDoc
->GetFormula(1, 16, srcSheet
));
4997 CPPUNIT_ASSERT_EQUAL(u
"=$C$5"_ustr
, m_pDoc
->GetFormula(2, 16, srcSheet
));
4998 CPPUNIT_ASSERT_EQUAL(u
"=$C5"_ustr
, m_pDoc
->GetFormula(3, 16, srcSheet
));
4999 CPPUNIT_ASSERT_EQUAL(u
"=C$5"_ustr
, m_pDoc
->GetFormula(4, 16, srcSheet
));
5000 CPPUNIT_ASSERT_EQUAL(u
"=SUM(C5:C5)"_ustr
, m_pDoc
->GetFormula(5, 16, srcSheet
));
5001 CPPUNIT_ASSERT_EQUAL(u
"=SUM($C$5:$C$5)"_ustr
, m_pDoc
->GetFormula(6, 16, srcSheet
));
5002 CPPUNIT_ASSERT_EQUAL(u
"=SUM($C5:$C5)"_ustr
, m_pDoc
->GetFormula(7, 16, srcSheet
));
5003 CPPUNIT_ASSERT_EQUAL(u
"=SUM(C$5:C$5)"_ustr
, m_pDoc
->GetFormula(8, 16, srcSheet
));
5004 CPPUNIT_ASSERT_EQUAL(u
"=SUM($B$3:$B$6)"_ustr
, m_pDoc
->GetFormula(9, 16, srcSheet
));
5005 CPPUNIT_ASSERT_EQUAL(u
"=SUM($B$3:$B$10)"_ustr
, m_pDoc
->GetFormula(10, 16, srcSheet
));
5007 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(1, 16, srcSheet
));
5008 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(2, 16, srcSheet
));
5009 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(3, 16, srcSheet
));
5010 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(4, 16, srcSheet
));
5011 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(5, 16, srcSheet
));
5012 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(6, 16, srcSheet
));
5013 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(7, 16, srcSheet
));
5014 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(8, 16, srcSheet
));
5015 CPPUNIT_ASSERT_EQUAL(10.0, m_pDoc
->GetValue(9, 16, srcSheet
));
5016 CPPUNIT_ASSERT_EQUAL(-17.0, m_pDoc
->GetValue(10, 16, srcSheet
));
5018 CPPUNIT_ASSERT_EQUAL(u
"=Range_C5"_ustr
, m_pDoc
->GetFormula(1, 17, srcSheet
));
5019 CPPUNIT_ASSERT_EQUAL(u
"=Range_aCa5"_ustr
, m_pDoc
->GetFormula(2, 17, srcSheet
));
5020 CPPUNIT_ASSERT_EQUAL(u
"=Range_aC5"_ustr
, m_pDoc
->GetFormula(3, 17, srcSheet
));
5021 CPPUNIT_ASSERT_EQUAL(u
"=Range_Ca5"_ustr
, m_pDoc
->GetFormula(4, 17, srcSheet
));
5022 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_C5_C5)"_ustr
, m_pDoc
->GetFormula(5, 17, srcSheet
));
5023 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_aCa5_aCa5)"_ustr
, m_pDoc
->GetFormula(6, 17, srcSheet
));
5024 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_aC5_aC5)"_ustr
, m_pDoc
->GetFormula(7, 17, srcSheet
));
5025 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_Ca5_Ca5)"_ustr
, m_pDoc
->GetFormula(8, 17, srcSheet
));
5026 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_aCa5_aCa8)"_ustr
, m_pDoc
->GetFormula(9, 17, srcSheet
));
5027 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_aCa5_aCa10)"_ustr
, m_pDoc
->GetFormula(10, 17, srcSheet
));
5029 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(1, 17, srcSheet
));
5030 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(2, 17, srcSheet
));
5031 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(3, 17, srcSheet
));
5032 CPPUNIT_ASSERT_EQUAL(5.0, m_pDoc
->GetValue(4, 17, srcSheet
));
5033 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(5, 17, srcSheet
));
5034 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(6, 17, srcSheet
));
5035 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(7, 17, srcSheet
));
5036 CPPUNIT_ASSERT_EQUAL(123.0, m_pDoc
->GetValue(8, 17, srcSheet
));
5037 CPPUNIT_ASSERT_EQUAL(10.0, m_pDoc
->GetValue(9, 17, srcSheet
));
5038 CPPUNIT_ASSERT_EQUAL(-17.0, m_pDoc
->GetValue(10, 17, srcSheet
));
5040 // Existing references to the destination range must not change
5041 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.D1"_ustr
, m_pDoc
->GetFormula(3, 101, srcSheet
));
5042 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.D2"_ustr
, m_pDoc
->GetFormula(3, 102, srcSheet
));
5043 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.D3"_ustr
, m_pDoc
->GetFormula(3, 103, srcSheet
));
5044 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.D4"_ustr
, m_pDoc
->GetFormula(3, 104, srcSheet
));
5045 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.D5"_ustr
, m_pDoc
->GetFormula(3, 105, srcSheet
));
5046 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.D6"_ustr
, m_pDoc
->GetFormula(3, 106, srcSheet
));
5047 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.D7"_ustr
, m_pDoc
->GetFormula(3, 107, srcSheet
));
5048 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.E1"_ustr
, m_pDoc
->GetFormula(4, 101, srcSheet
));
5049 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.E2"_ustr
, m_pDoc
->GetFormula(4, 102, srcSheet
));
5050 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.E3"_ustr
, m_pDoc
->GetFormula(4, 103, srcSheet
));
5051 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.E4"_ustr
, m_pDoc
->GetFormula(4, 104, srcSheet
));
5052 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.E5"_ustr
, m_pDoc
->GetFormula(4, 105, srcSheet
));
5053 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.E6"_ustr
, m_pDoc
->GetFormula(4, 106, srcSheet
));
5054 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.E7"_ustr
, m_pDoc
->GetFormula(4, 107, srcSheet
));
5055 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.F1"_ustr
, m_pDoc
->GetFormula(5, 101, srcSheet
));
5056 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.F2"_ustr
, m_pDoc
->GetFormula(5, 102, srcSheet
));
5057 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.F3"_ustr
, m_pDoc
->GetFormula(5, 103, srcSheet
));
5058 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.F4"_ustr
, m_pDoc
->GetFormula(5, 104, srcSheet
));
5059 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.F5"_ustr
, m_pDoc
->GetFormula(5, 105, srcSheet
));
5060 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.F6"_ustr
, m_pDoc
->GetFormula(5, 106, srcSheet
));
5061 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.F7"_ustr
, m_pDoc
->GetFormula(5, 107, srcSheet
));
5062 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.G1"_ustr
, m_pDoc
->GetFormula(6, 101, srcSheet
));
5063 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.G2"_ustr
, m_pDoc
->GetFormula(6, 102, srcSheet
));
5064 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.G3"_ustr
, m_pDoc
->GetFormula(6, 103, srcSheet
));
5065 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.G4"_ustr
, m_pDoc
->GetFormula(6, 104, srcSheet
));
5066 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.G5"_ustr
, m_pDoc
->GetFormula(6, 105, srcSheet
));
5067 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.G6"_ustr
, m_pDoc
->GetFormula(6, 106, srcSheet
));
5068 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.G7"_ustr
, m_pDoc
->GetFormula(6, 107, srcSheet
));
5069 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.H1"_ustr
, m_pDoc
->GetFormula(7, 101, srcSheet
));
5070 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.H2"_ustr
, m_pDoc
->GetFormula(7, 102, srcSheet
));
5071 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.H3"_ustr
, m_pDoc
->GetFormula(7, 103, srcSheet
));
5072 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.H4"_ustr
, m_pDoc
->GetFormula(7, 104, srcSheet
));
5073 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.H5"_ustr
, m_pDoc
->GetFormula(7, 105, srcSheet
));
5074 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.H6"_ustr
, m_pDoc
->GetFormula(7, 106, srcSheet
));
5075 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.H7"_ustr
, m_pDoc
->GetFormula(7, 107, srcSheet
));
5076 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.I1"_ustr
, m_pDoc
->GetFormula(8, 101, srcSheet
));
5077 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.I2"_ustr
, m_pDoc
->GetFormula(8, 102, srcSheet
));
5078 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.I3"_ustr
, m_pDoc
->GetFormula(8, 103, srcSheet
));
5079 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.I4"_ustr
, m_pDoc
->GetFormula(8, 104, srcSheet
));
5080 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.I5"_ustr
, m_pDoc
->GetFormula(8, 105, srcSheet
));
5081 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.I6"_ustr
, m_pDoc
->GetFormula(8, 106, srcSheet
));
5082 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.I7"_ustr
, m_pDoc
->GetFormula(8, 107, srcSheet
));
5083 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.J1"_ustr
, m_pDoc
->GetFormula(9, 101, srcSheet
));
5084 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.J2"_ustr
, m_pDoc
->GetFormula(9, 102, srcSheet
));
5085 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.J3"_ustr
, m_pDoc
->GetFormula(9, 103, srcSheet
));
5086 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.J4"_ustr
, m_pDoc
->GetFormula(9, 104, srcSheet
));
5087 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.J5"_ustr
, m_pDoc
->GetFormula(9, 105, srcSheet
));
5088 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.J6"_ustr
, m_pDoc
->GetFormula(9, 106, srcSheet
));
5089 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.J7"_ustr
, m_pDoc
->GetFormula(9, 107, srcSheet
));
5091 m_pDoc
->DeleteTab(destSheet
);
5092 m_pDoc
->DeleteTab(srcSheet
);
5095 void TestCopyPaste::checkCopyPasteSpecialMultiRangeColFilteredTranspose(bool bSkipEmpty
)
5097 const SCTAB srcSheet
= 0;
5098 const SCTAB destSheet
= 1;
5101 ┌--- filtered src row 2
5107 3 | =D2+10 *| =E5+30 b*| =D2+40 b*|
5109 4 | R1 *| 5 *| R4 *|
5110 5 | =D1+F1+60 | B*| =C1+E1+70 *|
5111 6 | =SUMIF(D1:G1;"<4") | | =B$3+$B$5+80 *|
5112 7 | 121 | 123 | 124 |
5114 * means note attached
5119 // check cell content after transposed copy/paste of filtered data
5120 // Col C and G are checked to be empty
5121 const EditTextObject
* pEditObj
;
5123 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(2, 0, destSheet
));
5124 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(3, 0, destSheet
));
5125 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(4, 0, destSheet
));
5126 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(5, 0, destSheet
));
5127 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(6, 0, destSheet
));
5128 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(7, 0, destSheet
));
5130 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(2, 1, destSheet
));
5131 CPPUNIT_ASSERT_EQUAL(1.0, m_pDoc
->GetValue(3, 1, destSheet
));
5132 CPPUNIT_ASSERT_EQUAL(3.0, m_pDoc
->GetValue(4, 1, destSheet
));
5133 CPPUNIT_ASSERT_EQUAL(4.0, m_pDoc
->GetValue(5, 1, destSheet
));
5134 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(6, 1, destSheet
));
5136 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(2, 5, destSheet
));
5137 CPPUNIT_ASSERT_EQUAL(u
"1000"_ustr
, m_pDoc
->GetString(2, 5, destSheet
));
5138 CPPUNIT_ASSERT_EQUAL(11.0, m_pDoc
->GetValue(3, 2, destSheet
));
5139 CPPUNIT_ASSERT_EQUAL(u
"=D2+10"_ustr
, m_pDoc
->GetFormula(3, 2, destSheet
));
5140 CPPUNIT_ASSERT_EQUAL(u
"=E5+30"_ustr
, m_pDoc
->GetFormula(4, 2, destSheet
));
5141 CPPUNIT_ASSERT_EQUAL(bSkipEmpty
? 1030.0 : 30.0,
5142 m_pDoc
->GetValue(4, 2, destSheet
)); // It was 35
5143 CPPUNIT_ASSERT_EQUAL(u
"=D2+40"_ustr
, m_pDoc
->GetFormula(5, 2, destSheet
));
5144 CPPUNIT_ASSERT_EQUAL(
5145 41.0, m_pDoc
->GetValue(5, 2, destSheet
)); // was originally 42, not adjusted by filtering
5146 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(6, 2, destSheet
));
5147 CPPUNIT_ASSERT_EQUAL(u
"1000"_ustr
, m_pDoc
->GetString(6, 2, destSheet
));
5148 // row 3, strings was not selected in multi range selection
5150 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(2, 3, destSheet
));
5151 pEditObj
= m_pDoc
->GetEditText(ScAddress(2, 3, destSheet
));
5152 CPPUNIT_ASSERT(pEditObj
== nullptr);
5153 pEditObj
= m_pDoc
->GetEditText(ScAddress(3, 3, destSheet
));
5154 CPPUNIT_ASSERT(pEditObj
);
5155 CPPUNIT_ASSERT_EQUAL(u
"R1"_ustr
, pEditObj
->GetText(0));
5156 CPPUNIT_ASSERT_EQUAL(5.0, m_pDoc
->GetValue(4, 3, destSheet
));
5157 pEditObj
= m_pDoc
->GetEditText(ScAddress(5, 3, destSheet
));
5158 CPPUNIT_ASSERT(pEditObj
);
5159 CPPUNIT_ASSERT_EQUAL(u
"R4"_ustr
, pEditObj
->GetText(0));
5160 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(6, 3, destSheet
));
5161 pEditObj
= m_pDoc
->GetEditText(ScAddress(6, 3, destSheet
));
5162 CPPUNIT_ASSERT(pEditObj
== nullptr);
5164 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(2, 4, destSheet
));
5165 CPPUNIT_ASSERT_EQUAL(u
"1000"_ustr
, m_pDoc
->GetString(2, 4, destSheet
));
5166 // formulas over filtered rows are not adjusted
5167 CPPUNIT_ASSERT_EQUAL(u
"=D1+F1+60"_ustr
, m_pDoc
->GetFormula(3, 4, destSheet
));
5168 CPPUNIT_ASSERT_EQUAL(2060.0, m_pDoc
->GetValue(3, 4, destSheet
)); // It was 64
5170 CPPUNIT_ASSERT_EQUAL(OUString(), m_pDoc
->GetString(4, 4, destSheet
));
5172 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(4, 4, destSheet
));
5173 CPPUNIT_ASSERT_EQUAL(u
"=C1+E1+70"_ustr
, m_pDoc
->GetFormula(5, 4, destSheet
));
5174 CPPUNIT_ASSERT_EQUAL(2070.0, m_pDoc
->GetValue(5, 4, destSheet
)); // It was 74
5175 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(6, 4, destSheet
));
5176 CPPUNIT_ASSERT_EQUAL(u
"1000"_ustr
, m_pDoc
->GetString(6, 4, destSheet
));
5178 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(2, 5, destSheet
));
5179 CPPUNIT_ASSERT_EQUAL(u
"1000"_ustr
, m_pDoc
->GetString(2, 5, destSheet
));
5180 // formulas over filtered rows are not adjusted
5181 CPPUNIT_ASSERT_EQUAL(u
"=SUMIF(D1:G1;\"<4\")"_ustr
, m_pDoc
->GetFormula(3, 5, destSheet
));
5182 CPPUNIT_ASSERT_EQUAL(0.0, m_pDoc
->GetValue(3, 5, destSheet
)); // It was 6
5184 CPPUNIT_ASSERT_EQUAL_MESSAGE("Cell E6", OUString(), m_pDoc
->GetString(4, 5, destSheet
));
5186 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(4, 5, destSheet
));
5187 CPPUNIT_ASSERT_EQUAL(u
"=B$3+$B$5+80"_ustr
, m_pDoc
->GetFormula(5, 5, destSheet
));
5188 CPPUNIT_ASSERT_EQUAL(2080.0, m_pDoc
->GetValue(5, 5, destSheet
));
5189 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(6, 5, destSheet
));
5190 CPPUNIT_ASSERT_EQUAL(u
"1000"_ustr
, m_pDoc
->GetString(6, 5, destSheet
));
5192 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(2, 6, destSheet
));
5193 CPPUNIT_ASSERT_EQUAL(121.0, m_pDoc
->GetValue(3, 6, destSheet
));
5194 CPPUNIT_ASSERT_EQUAL(123.0, m_pDoc
->GetValue(4, 6, destSheet
));
5195 CPPUNIT_ASSERT_EQUAL(124.0, m_pDoc
->GetValue(5, 6, destSheet
));
5196 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(6, 6, destSheet
));
5197 // row 7, not copied
5198 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(2, 7, destSheet
));
5199 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(3, 7, destSheet
));
5200 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(4, 7, destSheet
));
5201 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(5, 7, destSheet
));
5202 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(6, 7, destSheet
));
5203 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(7, 7, destSheet
));
5204 // row 8, not copied
5205 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(2, 7, destSheet
));
5206 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(3, 7, destSheet
));
5207 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(4, 7, destSheet
));
5208 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(5, 7, destSheet
));
5209 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(6, 7, destSheet
));
5210 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(7, 7, destSheet
));
5213 const SfxPoolItem
* pItem
= nullptr;
5214 m_pDoc
->GetPattern(ScAddress(3, 1, destSheet
))->GetItemSet().HasItem(ATTR_BACKGROUND
, &pItem
);
5215 CPPUNIT_ASSERT(pItem
);
5216 CPPUNIT_ASSERT_EQUAL(COL_BLUE
, static_cast<const SvxBrushItem
*>(pItem
)->GetColor());
5217 m_pDoc
->GetPattern(ScAddress(4, 1, destSheet
))->GetItemSet().HasItem(ATTR_BACKGROUND
, &pItem
);
5218 CPPUNIT_ASSERT(pItem
);
5219 CPPUNIT_ASSERT_EQUAL(COL_BLUE
, static_cast<const SvxBrushItem
*>(pItem
)->GetColor());
5220 m_pDoc
->GetPattern(ScAddress(5, 1, destSheet
))->GetItemSet().HasItem(ATTR_BACKGROUND
, &pItem
);
5221 CPPUNIT_ASSERT(!pItem
);
5222 m_pDoc
->GetPattern(ScAddress(6, 1, destSheet
))->GetItemSet().HasItem(ATTR_BACKGROUND
, &pItem
);
5223 CPPUNIT_ASSERT(!pItem
);
5224 m_pDoc
->GetPattern(ScAddress(4, 4, destSheet
))->GetItemSet().HasItem(ATTR_BACKGROUND
, &pItem
);
5225 CPPUNIT_ASSERT_EQUAL(bSkipEmpty
, pItem
== nullptr);
5227 CPPUNIT_ASSERT_EQUAL(COL_GREEN
, static_cast<const SvxBrushItem
*>(pItem
)->GetColor());
5229 // check border, left and right borders were transformed to top and bottom borders
5230 pItem
= m_pDoc
->GetAttr(ScAddress(3, 2, destSheet
), ATTR_BORDER
);
5231 CPPUNIT_ASSERT(pItem
);
5232 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetTop());
5233 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetBottom());
5234 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetLeft());
5235 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetRight());
5237 m_pDoc
->GetPattern(ScAddress(4, 2, destSheet
))->GetItemSet().HasItem(ATTR_BORDER
, &pItem
);
5238 CPPUNIT_ASSERT(pItem
);
5239 CPPUNIT_ASSERT(static_cast<const SvxBoxItem
*>(pItem
)->GetTop());
5241 pItem
= m_pDoc
->GetAttr(ScAddress(4, 2, destSheet
), ATTR_BORDER
);
5242 CPPUNIT_ASSERT(pItem
);
5243 CPPUNIT_ASSERT(static_cast<const SvxBoxItem
*>(pItem
)->GetTop());
5244 CPPUNIT_ASSERT(static_cast<const SvxBoxItem
*>(pItem
)->GetBottom());
5245 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetLeft());
5246 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetRight());
5247 pItem
= m_pDoc
->GetAttr(ScAddress(5, 2, destSheet
), ATTR_BORDER
);
5248 CPPUNIT_ASSERT(static_cast<const SvxBoxItem
*>(pItem
)->GetTop());
5249 CPPUNIT_ASSERT(static_cast<const SvxBoxItem
*>(pItem
)->GetBottom());
5250 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetLeft());
5251 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetRight());
5252 pItem
= m_pDoc
->GetAttr(ScAddress(6, 2, destSheet
), ATTR_BORDER
);
5253 CPPUNIT_ASSERT(pItem
);
5254 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetTop());
5255 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetBottom());
5256 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetLeft());
5257 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetRight());
5259 // check notes after transposed copy/paste
5260 // check presence of notes
5261 CPPUNIT_ASSERT(!m_pDoc
->HasNote(2, 0, destSheet
));
5262 CPPUNIT_ASSERT(!m_pDoc
->HasNote(3, 0, destSheet
));
5263 CPPUNIT_ASSERT(!m_pDoc
->HasNote(4, 0, destSheet
));
5264 CPPUNIT_ASSERT(!m_pDoc
->HasNote(5, 0, destSheet
));
5265 CPPUNIT_ASSERT(!m_pDoc
->HasNote(6, 0, destSheet
));
5266 CPPUNIT_ASSERT(!m_pDoc
->HasNote(2, 1, destSheet
));
5267 CPPUNIT_ASSERT(m_pDoc
->HasNote(3, 1, destSheet
));
5268 CPPUNIT_ASSERT(m_pDoc
->HasNote(4, 1, destSheet
));
5269 CPPUNIT_ASSERT(!m_pDoc
->HasNote(5, 1, destSheet
));
5270 CPPUNIT_ASSERT(!m_pDoc
->HasNote(6, 1, destSheet
));
5271 CPPUNIT_ASSERT(!m_pDoc
->HasNote(2, 2, destSheet
));
5272 CPPUNIT_ASSERT(m_pDoc
->HasNote(3, 2, destSheet
));
5273 CPPUNIT_ASSERT(m_pDoc
->HasNote(4, 2, destSheet
));
5274 CPPUNIT_ASSERT(m_pDoc
->HasNote(5, 2, destSheet
));
5275 CPPUNIT_ASSERT(!m_pDoc
->HasNote(6, 2, destSheet
));
5276 CPPUNIT_ASSERT(!m_pDoc
->HasNote(2, 3, destSheet
));
5277 CPPUNIT_ASSERT(m_pDoc
->HasNote(3, 3, destSheet
));
5278 CPPUNIT_ASSERT(m_pDoc
->HasNote(4, 3, destSheet
));
5279 CPPUNIT_ASSERT(m_pDoc
->HasNote(5, 3, destSheet
));
5280 CPPUNIT_ASSERT(!m_pDoc
->HasNote(6, 3, destSheet
));
5281 CPPUNIT_ASSERT(!m_pDoc
->HasNote(2, 4, destSheet
));
5282 CPPUNIT_ASSERT(!m_pDoc
->HasNote(3, 4, destSheet
));
5283 CPPUNIT_ASSERT_EQUAL(!bSkipEmpty
, m_pDoc
->HasNote(4, 4, destSheet
));
5284 CPPUNIT_ASSERT(m_pDoc
->HasNote(5, 4, destSheet
));
5285 CPPUNIT_ASSERT(!m_pDoc
->HasNote(6, 4, destSheet
));
5286 CPPUNIT_ASSERT(!m_pDoc
->HasNote(2, 5, destSheet
));
5287 CPPUNIT_ASSERT(!m_pDoc
->HasNote(3, 5, destSheet
));
5288 CPPUNIT_ASSERT(!m_pDoc
->HasNote(4, 5, destSheet
));
5289 CPPUNIT_ASSERT(m_pDoc
->HasNote(5, 5, destSheet
));
5290 CPPUNIT_ASSERT(!m_pDoc
->HasNote(6, 5, destSheet
));
5291 CPPUNIT_ASSERT(!m_pDoc
->HasNote(2, 6, destSheet
));
5292 CPPUNIT_ASSERT(!m_pDoc
->HasNote(3, 6, destSheet
));
5293 CPPUNIT_ASSERT(!m_pDoc
->HasNote(4, 6, destSheet
));
5294 CPPUNIT_ASSERT(!m_pDoc
->HasNote(5, 6, destSheet
));
5295 CPPUNIT_ASSERT(!m_pDoc
->HasNote(6, 6, destSheet
));
5297 CPPUNIT_ASSERT_EQUAL(u
"Note A1"_ustr
, getNote(3, 1, destSheet
));
5298 CPPUNIT_ASSERT_EQUAL(u
"Note A3"_ustr
, getNote(4, 1, destSheet
));
5299 CPPUNIT_ASSERT_EQUAL(u
"Note B1"_ustr
, getNote(3, 2, destSheet
));
5300 CPPUNIT_ASSERT_EQUAL(u
"Note B3"_ustr
, getNote(4, 2, destSheet
));
5301 CPPUNIT_ASSERT_EQUAL(u
"Note D1"_ustr
, getNote(3, 3, destSheet
));
5302 CPPUNIT_ASSERT_EQUAL(u
"Note D3"_ustr
, getNote(4, 3, destSheet
));
5304 CPPUNIT_ASSERT_EQUAL(u
"Note E2"_ustr
, getNote(4, 4, destSheet
));
5305 CPPUNIT_ASSERT_EQUAL(u
"Note E4"_ustr
, getNote(5, 4, destSheet
));
5306 CPPUNIT_ASSERT_EQUAL(u
"Note F4"_ustr
, getNote(5, 5, destSheet
));
5308 // check row 16 on src sheet, refs to copied/cut range
5309 CPPUNIT_ASSERT_EQUAL(u
"=C5"_ustr
, m_pDoc
->GetFormula(1, 16, srcSheet
));
5310 CPPUNIT_ASSERT_EQUAL(u
"=$C$5"_ustr
, m_pDoc
->GetFormula(2, 16, srcSheet
));
5311 CPPUNIT_ASSERT_EQUAL(u
"=$C5"_ustr
, m_pDoc
->GetFormula(3, 16, srcSheet
));
5312 CPPUNIT_ASSERT_EQUAL(u
"=C$5"_ustr
, m_pDoc
->GetFormula(4, 16, srcSheet
));
5313 CPPUNIT_ASSERT_EQUAL(u
"=SUM(C5:C5)"_ustr
, m_pDoc
->GetFormula(5, 16, srcSheet
));
5314 CPPUNIT_ASSERT_EQUAL(u
"=SUM($C$5:$C$5)"_ustr
, m_pDoc
->GetFormula(6, 16, srcSheet
));
5315 CPPUNIT_ASSERT_EQUAL(u
"=SUM($C5:$C5)"_ustr
, m_pDoc
->GetFormula(7, 16, srcSheet
));
5316 CPPUNIT_ASSERT_EQUAL(u
"=SUM(C$5:C$5)"_ustr
, m_pDoc
->GetFormula(8, 16, srcSheet
));
5317 CPPUNIT_ASSERT_EQUAL(u
"=SUM($B$3:$B$6)"_ustr
, m_pDoc
->GetFormula(9, 16, srcSheet
));
5318 CPPUNIT_ASSERT_EQUAL(u
"=SUM($B$3:$B$10)"_ustr
, m_pDoc
->GetFormula(10, 16, srcSheet
));
5320 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(1, 16, srcSheet
));
5321 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(2, 16, srcSheet
));
5322 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(3, 16, srcSheet
));
5323 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(4, 16, srcSheet
));
5324 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(5, 16, srcSheet
));
5325 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(6, 16, srcSheet
));
5326 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(7, 16, srcSheet
));
5327 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(8, 16, srcSheet
));
5328 CPPUNIT_ASSERT_EQUAL(10.0, m_pDoc
->GetValue(9, 16, srcSheet
));
5329 CPPUNIT_ASSERT_EQUAL(-17.0, m_pDoc
->GetValue(10, 16, srcSheet
));
5331 CPPUNIT_ASSERT_EQUAL(u
"=Range_C5"_ustr
, m_pDoc
->GetFormula(1, 17, srcSheet
));
5332 CPPUNIT_ASSERT_EQUAL(u
"=Range_aCa5"_ustr
, m_pDoc
->GetFormula(2, 17, srcSheet
));
5333 CPPUNIT_ASSERT_EQUAL(u
"=Range_aC5"_ustr
, m_pDoc
->GetFormula(3, 17, srcSheet
));
5334 CPPUNIT_ASSERT_EQUAL(u
"=Range_Ca5"_ustr
, m_pDoc
->GetFormula(4, 17, srcSheet
));
5335 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_C5_C5)"_ustr
, m_pDoc
->GetFormula(5, 17, srcSheet
));
5336 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_aCa5_aCa5)"_ustr
, m_pDoc
->GetFormula(6, 17, srcSheet
));
5337 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_aC5_aC5)"_ustr
, m_pDoc
->GetFormula(7, 17, srcSheet
));
5338 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_Ca5_Ca5)"_ustr
, m_pDoc
->GetFormula(8, 17, srcSheet
));
5339 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_aCa5_aCa8)"_ustr
, m_pDoc
->GetFormula(9, 17, srcSheet
));
5340 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_aCa5_aCa10)"_ustr
, m_pDoc
->GetFormula(10, 17, srcSheet
));
5342 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(1, 17, srcSheet
));
5343 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(2, 17, srcSheet
));
5344 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(3, 17, srcSheet
));
5345 CPPUNIT_ASSERT_EQUAL(5.0, m_pDoc
->GetValue(4, 17, srcSheet
));
5346 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(5, 17, srcSheet
));
5347 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(6, 17, srcSheet
));
5348 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(7, 17, srcSheet
));
5349 CPPUNIT_ASSERT_EQUAL(123.0, m_pDoc
->GetValue(8, 17, srcSheet
));
5350 CPPUNIT_ASSERT_EQUAL(10.0, m_pDoc
->GetValue(9, 17, srcSheet
));
5351 CPPUNIT_ASSERT_EQUAL(-17.0, m_pDoc
->GetValue(10, 17, srcSheet
));
5353 // Existing references to the destination range must not change
5354 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.D1"_ustr
, m_pDoc
->GetFormula(3, 101, srcSheet
));
5355 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.D2"_ustr
, m_pDoc
->GetFormula(3, 102, srcSheet
));
5356 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.D3"_ustr
, m_pDoc
->GetFormula(3, 103, srcSheet
));
5357 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.D4"_ustr
, m_pDoc
->GetFormula(3, 104, srcSheet
));
5358 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.D5"_ustr
, m_pDoc
->GetFormula(3, 105, srcSheet
));
5359 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.D6"_ustr
, m_pDoc
->GetFormula(3, 106, srcSheet
));
5360 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.D7"_ustr
, m_pDoc
->GetFormula(3, 107, srcSheet
));
5361 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.E1"_ustr
, m_pDoc
->GetFormula(4, 101, srcSheet
));
5362 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.E2"_ustr
, m_pDoc
->GetFormula(4, 102, srcSheet
));
5363 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.E3"_ustr
, m_pDoc
->GetFormula(4, 103, srcSheet
));
5364 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.E4"_ustr
, m_pDoc
->GetFormula(4, 104, srcSheet
));
5365 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.E5"_ustr
, m_pDoc
->GetFormula(4, 105, srcSheet
));
5366 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.E6"_ustr
, m_pDoc
->GetFormula(4, 106, srcSheet
));
5367 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.E7"_ustr
, m_pDoc
->GetFormula(4, 107, srcSheet
));
5368 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.F1"_ustr
, m_pDoc
->GetFormula(5, 101, srcSheet
));
5369 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.F2"_ustr
, m_pDoc
->GetFormula(5, 102, srcSheet
));
5370 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.F3"_ustr
, m_pDoc
->GetFormula(5, 103, srcSheet
));
5371 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.F4"_ustr
, m_pDoc
->GetFormula(5, 104, srcSheet
));
5372 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.F5"_ustr
, m_pDoc
->GetFormula(5, 105, srcSheet
));
5373 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.F6"_ustr
, m_pDoc
->GetFormula(5, 106, srcSheet
));
5374 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.F7"_ustr
, m_pDoc
->GetFormula(5, 107, srcSheet
));
5375 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.G1"_ustr
, m_pDoc
->GetFormula(6, 101, srcSheet
));
5376 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.G2"_ustr
, m_pDoc
->GetFormula(6, 102, srcSheet
));
5377 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.G3"_ustr
, m_pDoc
->GetFormula(6, 103, srcSheet
));
5378 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.G4"_ustr
, m_pDoc
->GetFormula(6, 104, srcSheet
));
5379 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.G5"_ustr
, m_pDoc
->GetFormula(6, 105, srcSheet
));
5380 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.G6"_ustr
, m_pDoc
->GetFormula(6, 106, srcSheet
));
5381 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.G7"_ustr
, m_pDoc
->GetFormula(6, 107, srcSheet
));
5382 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.H1"_ustr
, m_pDoc
->GetFormula(7, 101, srcSheet
));
5383 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.H2"_ustr
, m_pDoc
->GetFormula(7, 102, srcSheet
));
5384 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.H3"_ustr
, m_pDoc
->GetFormula(7, 103, srcSheet
));
5385 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.H4"_ustr
, m_pDoc
->GetFormula(7, 104, srcSheet
));
5386 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.H5"_ustr
, m_pDoc
->GetFormula(7, 105, srcSheet
));
5387 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.H6"_ustr
, m_pDoc
->GetFormula(7, 106, srcSheet
));
5388 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.H7"_ustr
, m_pDoc
->GetFormula(7, 107, srcSheet
));
5389 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.I1"_ustr
, m_pDoc
->GetFormula(8, 101, srcSheet
));
5390 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.I2"_ustr
, m_pDoc
->GetFormula(8, 102, srcSheet
));
5391 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.I3"_ustr
, m_pDoc
->GetFormula(8, 103, srcSheet
));
5392 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.I4"_ustr
, m_pDoc
->GetFormula(8, 104, srcSheet
));
5393 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.I5"_ustr
, m_pDoc
->GetFormula(8, 105, srcSheet
));
5394 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.I6"_ustr
, m_pDoc
->GetFormula(8, 106, srcSheet
));
5395 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.I7"_ustr
, m_pDoc
->GetFormula(8, 107, srcSheet
));
5396 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.J1"_ustr
, m_pDoc
->GetFormula(9, 101, srcSheet
));
5397 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.J2"_ustr
, m_pDoc
->GetFormula(9, 102, srcSheet
));
5398 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.J3"_ustr
, m_pDoc
->GetFormula(9, 103, srcSheet
));
5399 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.J4"_ustr
, m_pDoc
->GetFormula(9, 104, srcSheet
));
5400 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.J5"_ustr
, m_pDoc
->GetFormula(9, 105, srcSheet
));
5401 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.J6"_ustr
, m_pDoc
->GetFormula(9, 106, srcSheet
));
5402 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.J7"_ustr
, m_pDoc
->GetFormula(9, 107, srcSheet
));
5404 m_pDoc
->DeleteTab(destSheet
);
5405 m_pDoc
->DeleteTab(srcSheet
);
5408 void TestCopyPaste::checkCopyPasteSpecialMultiRangeRow(bool bSkipEmpty
)
5410 const SCTAB srcSheet
= 0;
5411 const SCTAB destSheet
= 1;
5414 | D | E | F | G | H | I |
5416 2 | 1 B*| =D2+10 *| a | R1 *| =D2+D4+60 | =SUMIF(D2:D5;"<4") |
5417 3 | 2 B*| =D3+20 b | b *| R2 *| | *| <- filtered row
5418 4 | 3 B*| =G4+30 b*| c *| 5 *| B*| |
5420 5 | 6 | q | r bB*| s bB| t | u |
5421 6 | -11 | -12 | -13 | -14 | -15 | -16 |
5423 * means note attached
5428 const EditTextObject
* pEditObj
;
5430 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(2, 0, destSheet
));
5431 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(2, 1, destSheet
));
5432 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(2, 2, destSheet
));
5433 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(2, 3, destSheet
));
5434 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(2, 4, destSheet
));
5435 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(2, 5, destSheet
));
5437 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(3, 0, destSheet
));
5438 CPPUNIT_ASSERT_EQUAL(1.0, m_pDoc
->GetValue(3, 1, destSheet
));
5439 CPPUNIT_ASSERT_EQUAL(2.0, m_pDoc
->GetValue(3, 2, destSheet
));
5440 CPPUNIT_ASSERT_EQUAL(3.0, m_pDoc
->GetValue(3, 3, destSheet
));
5441 CPPUNIT_ASSERT_EQUAL(6.0, m_pDoc
->GetValue(3, 4, destSheet
));
5442 CPPUNIT_ASSERT_EQUAL(-11.0, m_pDoc
->GetValue(3, 5, destSheet
));
5443 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(3, 6, destSheet
));
5445 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(4, 0, destSheet
));
5446 CPPUNIT_ASSERT_EQUAL(u
"1000"_ustr
, m_pDoc
->GetString(4, 0, destSheet
));
5447 CPPUNIT_ASSERT_EQUAL(11.0, m_pDoc
->GetValue(4, 1, destSheet
));
5448 CPPUNIT_ASSERT_EQUAL(u
"=D2+10"_ustr
, m_pDoc
->GetFormula(4, 1, destSheet
));
5449 CPPUNIT_ASSERT_EQUAL(u
"=D3+20"_ustr
, m_pDoc
->GetFormula(4, 2, destSheet
));
5450 CPPUNIT_ASSERT_EQUAL(22.0, m_pDoc
->GetValue(4, 2, destSheet
));
5451 CPPUNIT_ASSERT_EQUAL(u
"=G4+30"_ustr
, m_pDoc
->GetFormula(4, 3, destSheet
));
5452 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(4, 3, destSheet
));
5453 CPPUNIT_ASSERT_EQUAL(u
"q"_ustr
, m_pDoc
->GetString(4, 4, destSheet
));
5454 CPPUNIT_ASSERT_EQUAL(-12.0, m_pDoc
->GetValue(4, 5, destSheet
));
5455 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(4, 6, destSheet
));
5456 CPPUNIT_ASSERT_EQUAL(u
"1000"_ustr
, m_pDoc
->GetString(4, 6, destSheet
));
5458 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(5, 0, destSheet
));
5459 CPPUNIT_ASSERT_EQUAL(u
"1000"_ustr
, m_pDoc
->GetString(5, 0, destSheet
));
5460 CPPUNIT_ASSERT_EQUAL(u
"a"_ustr
, m_pDoc
->GetString(5, 1, destSheet
));
5461 CPPUNIT_ASSERT_EQUAL(u
"b"_ustr
, m_pDoc
->GetString(5, 2, destSheet
));
5462 CPPUNIT_ASSERT_EQUAL(u
"c"_ustr
, m_pDoc
->GetString(5, 3, destSheet
));
5463 CPPUNIT_ASSERT_EQUAL(u
"r"_ustr
, m_pDoc
->GetString(5, 4, destSheet
));
5464 CPPUNIT_ASSERT_EQUAL(-13.0, m_pDoc
->GetValue(5, 5, destSheet
));
5465 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(5, 6, destSheet
));
5466 CPPUNIT_ASSERT_EQUAL(u
"1000"_ustr
, m_pDoc
->GetString(5, 6, destSheet
));
5468 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(6, 0, destSheet
));
5469 pEditObj
= m_pDoc
->GetEditText(ScAddress(6, 0, destSheet
));
5470 CPPUNIT_ASSERT(pEditObj
== nullptr);
5471 pEditObj
= m_pDoc
->GetEditText(ScAddress(6, 1, destSheet
));
5472 CPPUNIT_ASSERT(pEditObj
);
5473 CPPUNIT_ASSERT_EQUAL(u
"R1"_ustr
, pEditObj
->GetText(0));
5474 pEditObj
= m_pDoc
->GetEditText(ScAddress(6, 2, destSheet
));
5475 CPPUNIT_ASSERT(pEditObj
);
5476 CPPUNIT_ASSERT_EQUAL(u
"R2"_ustr
, pEditObj
->GetText(0));
5477 CPPUNIT_ASSERT_EQUAL(5.0, m_pDoc
->GetValue(6, 3, destSheet
));
5478 CPPUNIT_ASSERT_EQUAL(u
"s"_ustr
, m_pDoc
->GetString(6, 4, destSheet
));
5479 CPPUNIT_ASSERT_EQUAL(-14.0, m_pDoc
->GetValue(6, 5, destSheet
));
5480 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(6, 6, destSheet
));
5481 pEditObj
= m_pDoc
->GetEditText(ScAddress(6, 6, destSheet
));
5482 CPPUNIT_ASSERT(pEditObj
== nullptr);
5484 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(7, 0, destSheet
));
5485 CPPUNIT_ASSERT_EQUAL(u
"1000"_ustr
, m_pDoc
->GetString(7, 0, destSheet
));
5486 CPPUNIT_ASSERT_EQUAL(u
"=D2+D4+60"_ustr
, m_pDoc
->GetFormula(7, 1, destSheet
));
5487 CPPUNIT_ASSERT_EQUAL(64.0, m_pDoc
->GetValue(7, 1, destSheet
));
5490 CPPUNIT_ASSERT_EQUAL(OUString(), m_pDoc
->GetString(7, 2, destSheet
));
5491 CPPUNIT_ASSERT_EQUAL(OUString(), m_pDoc
->GetString(7, 3, destSheet
));
5495 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(7, 2, destSheet
));
5496 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(7, 3, destSheet
));
5498 CPPUNIT_ASSERT_EQUAL(u
"t"_ustr
, m_pDoc
->GetString(7, 4, destSheet
));
5499 CPPUNIT_ASSERT_EQUAL(-15.0, m_pDoc
->GetValue(7, 5, destSheet
));
5500 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(7, 6, destSheet
));
5501 CPPUNIT_ASSERT_EQUAL(u
"1000"_ustr
, m_pDoc
->GetString(7, 6, destSheet
));
5503 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(8, 0, destSheet
));
5504 CPPUNIT_ASSERT_EQUAL(u
"1000"_ustr
, m_pDoc
->GetString(7, 0, destSheet
));
5505 CPPUNIT_ASSERT_EQUAL(u
"=SUMIF(D2:D5;\"<4\")"_ustr
, m_pDoc
->GetFormula(8, 1, destSheet
));
5506 CPPUNIT_ASSERT_EQUAL(6.0, m_pDoc
->GetValue(8, 1, destSheet
));
5509 CPPUNIT_ASSERT_EQUAL(OUString(), m_pDoc
->GetString(8, 2, destSheet
));
5510 CPPUNIT_ASSERT_EQUAL(OUString(), m_pDoc
->GetString(8, 3, destSheet
));
5514 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(8, 2, destSheet
));
5515 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(8, 3, destSheet
));
5517 CPPUNIT_ASSERT_EQUAL(u
"u"_ustr
, m_pDoc
->GetString(8, 4, destSheet
));
5518 CPPUNIT_ASSERT_EQUAL(-16.0, m_pDoc
->GetValue(8, 5, destSheet
));
5519 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(8, 6, destSheet
));
5520 CPPUNIT_ASSERT_EQUAL(u
"1000"_ustr
, m_pDoc
->GetString(8, 6, destSheet
));
5522 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(9, 0, destSheet
));
5523 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(9, 1, destSheet
));
5524 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(9, 2, destSheet
));
5525 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(9, 3, destSheet
));
5526 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(9, 4, destSheet
));
5527 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(9, 5, destSheet
));
5530 const SfxPoolItem
* pItem
= nullptr;
5531 m_pDoc
->GetPattern(ScAddress(3, 1, destSheet
))->GetItemSet().HasItem(ATTR_BACKGROUND
, &pItem
);
5532 CPPUNIT_ASSERT(pItem
);
5533 CPPUNIT_ASSERT_EQUAL(COL_BLUE
, static_cast<const SvxBrushItem
*>(pItem
)->GetColor());
5534 m_pDoc
->GetPattern(ScAddress(3, 2, destSheet
))->GetItemSet().HasItem(ATTR_BACKGROUND
, &pItem
);
5535 CPPUNIT_ASSERT(pItem
);
5536 CPPUNIT_ASSERT_EQUAL(COL_BLUE
, static_cast<const SvxBrushItem
*>(pItem
)->GetColor());
5537 m_pDoc
->GetPattern(ScAddress(3, 3, destSheet
))->GetItemSet().HasItem(ATTR_BACKGROUND
, &pItem
);
5538 CPPUNIT_ASSERT_EQUAL(COL_BLUE
, static_cast<const SvxBrushItem
*>(pItem
)->GetColor());
5539 m_pDoc
->GetPattern(ScAddress(3, 4, destSheet
))->GetItemSet().HasItem(ATTR_BACKGROUND
, &pItem
);
5540 CPPUNIT_ASSERT(!pItem
);
5541 m_pDoc
->GetPattern(ScAddress(3, 5, destSheet
))->GetItemSet().HasItem(ATTR_BACKGROUND
, &pItem
);
5542 CPPUNIT_ASSERT(!pItem
);
5543 m_pDoc
->GetPattern(ScAddress(7, 3, destSheet
))->GetItemSet().HasItem(ATTR_BACKGROUND
, &pItem
);
5544 CPPUNIT_ASSERT_EQUAL(bSkipEmpty
, pItem
== nullptr);
5546 CPPUNIT_ASSERT_EQUAL(COL_GREEN
, static_cast<const SvxBrushItem
*>(pItem
)->GetColor());
5548 m_pDoc
->GetPattern(ScAddress(4, 4, destSheet
))->GetItemSet().HasItem(ATTR_BACKGROUND
, &pItem
);
5549 CPPUNIT_ASSERT(!pItem
);
5550 m_pDoc
->GetPattern(ScAddress(5, 4, destSheet
))->GetItemSet().HasItem(ATTR_BACKGROUND
, &pItem
);
5551 CPPUNIT_ASSERT(pItem
);
5552 CPPUNIT_ASSERT_EQUAL(COL_RED
, static_cast<const SvxBrushItem
*>(pItem
)->GetColor());
5553 m_pDoc
->GetPattern(ScAddress(6, 4, destSheet
))->GetItemSet().HasItem(ATTR_BACKGROUND
, &pItem
);
5554 CPPUNIT_ASSERT(pItem
);
5555 CPPUNIT_ASSERT_EQUAL(COL_RED
, static_cast<const SvxBrushItem
*>(pItem
)->GetColor());
5556 m_pDoc
->GetPattern(ScAddress(7, 4, destSheet
))->GetItemSet().HasItem(ATTR_BACKGROUND
, &pItem
);
5557 CPPUNIT_ASSERT(!pItem
);
5559 // check border, left and right borders were transformed to top and bottom borders
5560 pItem
= m_pDoc
->GetAttr(ScAddress(4, 1, destSheet
), ATTR_BORDER
);
5561 CPPUNIT_ASSERT(pItem
);
5562 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetTop());
5563 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetBottom());
5564 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetLeft());
5565 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetRight());
5566 pItem
= m_pDoc
->GetAttr(ScAddress(4, 2, destSheet
), ATTR_BORDER
);
5567 CPPUNIT_ASSERT(pItem
);
5568 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetTop());
5569 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetBottom());
5570 CPPUNIT_ASSERT(static_cast<const SvxBoxItem
*>(pItem
)->GetLeft());
5571 CPPUNIT_ASSERT(static_cast<const SvxBoxItem
*>(pItem
)->GetRight());
5572 pItem
= m_pDoc
->GetAttr(ScAddress(4, 3, destSheet
), ATTR_BORDER
);
5573 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetTop());
5574 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetBottom());
5575 CPPUNIT_ASSERT(static_cast<const SvxBoxItem
*>(pItem
)->GetLeft());
5576 CPPUNIT_ASSERT(static_cast<const SvxBoxItem
*>(pItem
)->GetRight());
5577 pItem
= m_pDoc
->GetAttr(ScAddress(4, 4, destSheet
), ATTR_BORDER
);
5578 CPPUNIT_ASSERT(pItem
);
5579 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetTop());
5580 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetBottom());
5581 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetLeft());
5582 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetRight());
5583 pItem
= m_pDoc
->GetAttr(ScAddress(4, 5, destSheet
), ATTR_BORDER
);
5584 CPPUNIT_ASSERT(pItem
);
5585 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetTop());
5586 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetBottom());
5587 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetLeft());
5588 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetRight());
5590 pItem
= m_pDoc
->GetAttr(ScAddress(3, 4, destSheet
), ATTR_BORDER
);
5591 CPPUNIT_ASSERT(pItem
);
5592 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetTop());
5593 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetBottom());
5594 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetLeft());
5595 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetRight());
5596 pItem
= m_pDoc
->GetAttr(ScAddress(4, 4, destSheet
), ATTR_BORDER
);
5597 CPPUNIT_ASSERT(pItem
);
5598 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetTop());
5599 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetBottom());
5600 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetLeft());
5601 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetRight());
5602 pItem
= m_pDoc
->GetAttr(ScAddress(5, 4, destSheet
), ATTR_BORDER
);
5603 CPPUNIT_ASSERT(static_cast<const SvxBoxItem
*>(pItem
)->GetTop());
5604 CPPUNIT_ASSERT(static_cast<const SvxBoxItem
*>(pItem
)->GetBottom());
5605 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetLeft());
5606 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetRight());
5607 pItem
= m_pDoc
->GetAttr(ScAddress(6, 4, destSheet
), ATTR_BORDER
);
5608 CPPUNIT_ASSERT(pItem
);
5609 CPPUNIT_ASSERT(static_cast<const SvxBoxItem
*>(pItem
)->GetTop());
5610 CPPUNIT_ASSERT(static_cast<const SvxBoxItem
*>(pItem
)->GetBottom());
5611 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetLeft());
5612 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetRight());
5613 pItem
= m_pDoc
->GetAttr(ScAddress(7, 4, destSheet
), ATTR_BORDER
);
5614 CPPUNIT_ASSERT(pItem
);
5615 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetTop());
5616 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetBottom());
5617 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetLeft());
5618 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetRight());
5620 // check notes after transposed copy/paste
5621 // check presence of notes
5622 CPPUNIT_ASSERT(!m_pDoc
->HasNote(2, 0, destSheet
));
5623 CPPUNIT_ASSERT(!m_pDoc
->HasNote(3, 0, destSheet
));
5624 CPPUNIT_ASSERT(!m_pDoc
->HasNote(4, 0, destSheet
));
5625 CPPUNIT_ASSERT(!m_pDoc
->HasNote(5, 0, destSheet
));
5626 CPPUNIT_ASSERT(!m_pDoc
->HasNote(6, 0, destSheet
));
5627 CPPUNIT_ASSERT(!m_pDoc
->HasNote(7, 0, destSheet
));
5628 CPPUNIT_ASSERT(!m_pDoc
->HasNote(8, 0, destSheet
));
5629 CPPUNIT_ASSERT(!m_pDoc
->HasNote(9, 0, destSheet
));
5630 CPPUNIT_ASSERT(!m_pDoc
->HasNote(2, 1, destSheet
));
5631 CPPUNIT_ASSERT(m_pDoc
->HasNote(3, 1, destSheet
));
5632 CPPUNIT_ASSERT(m_pDoc
->HasNote(4, 1, destSheet
));
5633 CPPUNIT_ASSERT(!m_pDoc
->HasNote(5, 1, destSheet
));
5634 CPPUNIT_ASSERT(m_pDoc
->HasNote(6, 1, destSheet
));
5635 CPPUNIT_ASSERT(!m_pDoc
->HasNote(7, 1, destSheet
));
5636 CPPUNIT_ASSERT(!m_pDoc
->HasNote(8, 1, destSheet
));
5637 CPPUNIT_ASSERT(!m_pDoc
->HasNote(9, 1, destSheet
));
5638 CPPUNIT_ASSERT(!m_pDoc
->HasNote(2, 2, destSheet
));
5639 CPPUNIT_ASSERT(m_pDoc
->HasNote(3, 2, destSheet
));
5640 CPPUNIT_ASSERT(!m_pDoc
->HasNote(4, 2, destSheet
));
5641 CPPUNIT_ASSERT(m_pDoc
->HasNote(5, 2, destSheet
));
5642 CPPUNIT_ASSERT(m_pDoc
->HasNote(6, 2, destSheet
));
5643 CPPUNIT_ASSERT(!m_pDoc
->HasNote(7, 2, destSheet
));
5644 CPPUNIT_ASSERT_EQUAL(!bSkipEmpty
, m_pDoc
->HasNote(8, 2, destSheet
));
5645 CPPUNIT_ASSERT(!m_pDoc
->HasNote(9, 2, destSheet
));
5646 CPPUNIT_ASSERT(!m_pDoc
->HasNote(2, 3, destSheet
));
5647 CPPUNIT_ASSERT(m_pDoc
->HasNote(3, 3, destSheet
));
5648 CPPUNIT_ASSERT(m_pDoc
->HasNote(4, 3, destSheet
));
5649 CPPUNIT_ASSERT(m_pDoc
->HasNote(5, 3, destSheet
));
5650 CPPUNIT_ASSERT(m_pDoc
->HasNote(6, 3, destSheet
));
5651 CPPUNIT_ASSERT_EQUAL(!bSkipEmpty
, m_pDoc
->HasNote(7, 3, destSheet
));
5652 CPPUNIT_ASSERT(!m_pDoc
->HasNote(8, 3, destSheet
));
5653 CPPUNIT_ASSERT(!m_pDoc
->HasNote(9, 3, destSheet
));
5654 CPPUNIT_ASSERT(!m_pDoc
->HasNote(2, 4, destSheet
));
5655 CPPUNIT_ASSERT(!m_pDoc
->HasNote(3, 4, destSheet
));
5656 CPPUNIT_ASSERT(!m_pDoc
->HasNote(4, 4, destSheet
));
5657 CPPUNIT_ASSERT(m_pDoc
->HasNote(5, 4, destSheet
));
5658 CPPUNIT_ASSERT(!m_pDoc
->HasNote(6, 4, destSheet
));
5659 CPPUNIT_ASSERT(!m_pDoc
->HasNote(7, 4, destSheet
));
5660 CPPUNIT_ASSERT(!m_pDoc
->HasNote(8, 4, destSheet
));
5661 CPPUNIT_ASSERT(!m_pDoc
->HasNote(9, 4, destSheet
));
5662 CPPUNIT_ASSERT(!m_pDoc
->HasNote(2, 5, destSheet
));
5663 CPPUNIT_ASSERT(!m_pDoc
->HasNote(3, 5, destSheet
));
5664 CPPUNIT_ASSERT(!m_pDoc
->HasNote(4, 5, destSheet
));
5665 CPPUNIT_ASSERT(!m_pDoc
->HasNote(5, 5, destSheet
));
5666 CPPUNIT_ASSERT(!m_pDoc
->HasNote(6, 5, destSheet
));
5667 CPPUNIT_ASSERT(!m_pDoc
->HasNote(7, 5, destSheet
));
5668 CPPUNIT_ASSERT(!m_pDoc
->HasNote(8, 5, destSheet
));
5669 CPPUNIT_ASSERT(!m_pDoc
->HasNote(9, 5, destSheet
));
5671 // check values of notes
5672 CPPUNIT_ASSERT_EQUAL(u
"Note A1"_ustr
, getNote(3, 1, destSheet
));
5673 CPPUNIT_ASSERT_EQUAL(u
"Note A2"_ustr
, getNote(3, 2, destSheet
));
5674 CPPUNIT_ASSERT_EQUAL(u
"Note A3"_ustr
, getNote(3, 3, destSheet
));
5675 CPPUNIT_ASSERT_EQUAL(u
"Note B1"_ustr
, getNote(4, 1, destSheet
));
5676 CPPUNIT_ASSERT_EQUAL(u
"Note B3"_ustr
, getNote(4, 3, destSheet
));
5677 CPPUNIT_ASSERT_EQUAL(u
"Note C2"_ustr
, getNote(5, 2, destSheet
));
5678 CPPUNIT_ASSERT_EQUAL(u
"Note C3"_ustr
, getNote(5, 3, destSheet
));
5679 CPPUNIT_ASSERT_EQUAL(u
"Note D1"_ustr
, getNote(6, 1, destSheet
));
5680 CPPUNIT_ASSERT_EQUAL(u
"Note D2"_ustr
, getNote(6, 2, destSheet
));
5681 CPPUNIT_ASSERT_EQUAL(u
"Note D3"_ustr
, getNote(6, 3, destSheet
));
5683 CPPUNIT_ASSERT_EQUAL(u
"Note E2"_ustr
, getNote(7, 3, destSheet
));
5685 CPPUNIT_ASSERT_EQUAL(u
"Note F2"_ustr
, getNote(8, 2, destSheet
));
5686 CPPUNIT_ASSERT_EQUAL(u
"Note C5"_ustr
, getNote(5, 4, destSheet
));
5688 // check row 16 on src sheet, refs to copied/cut range
5689 CPPUNIT_ASSERT_EQUAL(u
"=C5"_ustr
, m_pDoc
->GetFormula(1, 16, srcSheet
));
5690 CPPUNIT_ASSERT_EQUAL(u
"=$C$5"_ustr
, m_pDoc
->GetFormula(2, 16, srcSheet
));
5691 CPPUNIT_ASSERT_EQUAL(u
"=$C5"_ustr
, m_pDoc
->GetFormula(3, 16, srcSheet
));
5692 CPPUNIT_ASSERT_EQUAL(u
"=C$5"_ustr
, m_pDoc
->GetFormula(4, 16, srcSheet
));
5693 CPPUNIT_ASSERT_EQUAL(u
"=SUM(C5:C5)"_ustr
, m_pDoc
->GetFormula(5, 16, srcSheet
));
5694 CPPUNIT_ASSERT_EQUAL(u
"=SUM($C$5:$C$5)"_ustr
, m_pDoc
->GetFormula(6, 16, srcSheet
));
5695 CPPUNIT_ASSERT_EQUAL(u
"=SUM($C5:$C5)"_ustr
, m_pDoc
->GetFormula(7, 16, srcSheet
));
5696 CPPUNIT_ASSERT_EQUAL(u
"=SUM(C$5:C$5)"_ustr
, m_pDoc
->GetFormula(8, 16, srcSheet
));
5697 CPPUNIT_ASSERT_EQUAL(u
"=SUM($B$3:$B$6)"_ustr
, m_pDoc
->GetFormula(9, 16, srcSheet
));
5698 CPPUNIT_ASSERT_EQUAL(u
"=SUM($B$3:$B$10)"_ustr
, m_pDoc
->GetFormula(10, 16, srcSheet
));
5700 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(1, 16, srcSheet
));
5701 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(2, 16, srcSheet
));
5702 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(3, 16, srcSheet
));
5703 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(4, 16, srcSheet
));
5704 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(5, 16, srcSheet
));
5705 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(6, 16, srcSheet
));
5706 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(7, 16, srcSheet
));
5707 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(8, 16, srcSheet
));
5708 CPPUNIT_ASSERT_EQUAL(10.0, m_pDoc
->GetValue(9, 16, srcSheet
));
5709 CPPUNIT_ASSERT_EQUAL(-17.0, m_pDoc
->GetValue(10, 16, srcSheet
));
5711 CPPUNIT_ASSERT_EQUAL(u
"=Range_C5"_ustr
, m_pDoc
->GetFormula(1, 17, srcSheet
));
5712 CPPUNIT_ASSERT_EQUAL(u
"=Range_aCa5"_ustr
, m_pDoc
->GetFormula(2, 17, srcSheet
));
5713 CPPUNIT_ASSERT_EQUAL(u
"=Range_aC5"_ustr
, m_pDoc
->GetFormula(3, 17, srcSheet
));
5714 CPPUNIT_ASSERT_EQUAL(u
"=Range_Ca5"_ustr
, m_pDoc
->GetFormula(4, 17, srcSheet
));
5715 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_C5_C5)"_ustr
, m_pDoc
->GetFormula(5, 17, srcSheet
));
5716 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_aCa5_aCa5)"_ustr
, m_pDoc
->GetFormula(6, 17, srcSheet
));
5717 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_aC5_aC5)"_ustr
, m_pDoc
->GetFormula(7, 17, srcSheet
));
5718 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_Ca5_Ca5)"_ustr
, m_pDoc
->GetFormula(8, 17, srcSheet
));
5719 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_aCa5_aCa8)"_ustr
, m_pDoc
->GetFormula(9, 17, srcSheet
));
5720 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_aCa5_aCa10)"_ustr
, m_pDoc
->GetFormula(10, 17, srcSheet
));
5722 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(1, 17, srcSheet
));
5723 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(2, 17, srcSheet
));
5724 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(3, 17, srcSheet
));
5725 CPPUNIT_ASSERT_EQUAL(5.0, m_pDoc
->GetValue(4, 17, srcSheet
));
5726 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(5, 17, srcSheet
));
5727 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(6, 17, srcSheet
));
5728 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(7, 17, srcSheet
));
5729 CPPUNIT_ASSERT_EQUAL(123.0, m_pDoc
->GetValue(8, 17, srcSheet
));
5730 CPPUNIT_ASSERT_EQUAL(10.0, m_pDoc
->GetValue(9, 17, srcSheet
));
5731 CPPUNIT_ASSERT_EQUAL(-17.0, m_pDoc
->GetValue(10, 17, srcSheet
));
5733 // Existing references to the destination range must not change
5734 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.D1"_ustr
, m_pDoc
->GetFormula(3, 101, srcSheet
));
5735 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.D2"_ustr
, m_pDoc
->GetFormula(3, 102, srcSheet
));
5736 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.D3"_ustr
, m_pDoc
->GetFormula(3, 103, srcSheet
));
5737 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.D4"_ustr
, m_pDoc
->GetFormula(3, 104, srcSheet
));
5738 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.D5"_ustr
, m_pDoc
->GetFormula(3, 105, srcSheet
));
5739 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.D6"_ustr
, m_pDoc
->GetFormula(3, 106, srcSheet
));
5740 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.D7"_ustr
, m_pDoc
->GetFormula(3, 107, srcSheet
));
5741 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.E1"_ustr
, m_pDoc
->GetFormula(4, 101, srcSheet
));
5742 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.E2"_ustr
, m_pDoc
->GetFormula(4, 102, srcSheet
));
5743 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.E3"_ustr
, m_pDoc
->GetFormula(4, 103, srcSheet
));
5744 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.E4"_ustr
, m_pDoc
->GetFormula(4, 104, srcSheet
));
5745 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.E5"_ustr
, m_pDoc
->GetFormula(4, 105, srcSheet
));
5746 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.E6"_ustr
, m_pDoc
->GetFormula(4, 106, srcSheet
));
5747 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.E7"_ustr
, m_pDoc
->GetFormula(4, 107, srcSheet
));
5748 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.F1"_ustr
, m_pDoc
->GetFormula(5, 101, srcSheet
));
5749 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.F2"_ustr
, m_pDoc
->GetFormula(5, 102, srcSheet
));
5750 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.F3"_ustr
, m_pDoc
->GetFormula(5, 103, srcSheet
));
5751 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.F4"_ustr
, m_pDoc
->GetFormula(5, 104, srcSheet
));
5752 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.F5"_ustr
, m_pDoc
->GetFormula(5, 105, srcSheet
));
5753 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.F6"_ustr
, m_pDoc
->GetFormula(5, 106, srcSheet
));
5754 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.F7"_ustr
, m_pDoc
->GetFormula(5, 107, srcSheet
));
5755 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.G1"_ustr
, m_pDoc
->GetFormula(6, 101, srcSheet
));
5756 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.G2"_ustr
, m_pDoc
->GetFormula(6, 102, srcSheet
));
5757 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.G3"_ustr
, m_pDoc
->GetFormula(6, 103, srcSheet
));
5758 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.G4"_ustr
, m_pDoc
->GetFormula(6, 104, srcSheet
));
5759 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.G5"_ustr
, m_pDoc
->GetFormula(6, 105, srcSheet
));
5760 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.G6"_ustr
, m_pDoc
->GetFormula(6, 106, srcSheet
));
5761 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.G7"_ustr
, m_pDoc
->GetFormula(6, 107, srcSheet
));
5762 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.H1"_ustr
, m_pDoc
->GetFormula(7, 101, srcSheet
));
5763 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.H2"_ustr
, m_pDoc
->GetFormula(7, 102, srcSheet
));
5764 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.H3"_ustr
, m_pDoc
->GetFormula(7, 103, srcSheet
));
5765 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.H4"_ustr
, m_pDoc
->GetFormula(7, 104, srcSheet
));
5766 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.H5"_ustr
, m_pDoc
->GetFormula(7, 105, srcSheet
));
5767 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.H6"_ustr
, m_pDoc
->GetFormula(7, 106, srcSheet
));
5768 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.H7"_ustr
, m_pDoc
->GetFormula(7, 107, srcSheet
));
5769 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.I1"_ustr
, m_pDoc
->GetFormula(8, 101, srcSheet
));
5770 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.I2"_ustr
, m_pDoc
->GetFormula(8, 102, srcSheet
));
5771 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.I3"_ustr
, m_pDoc
->GetFormula(8, 103, srcSheet
));
5772 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.I4"_ustr
, m_pDoc
->GetFormula(8, 104, srcSheet
));
5773 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.I5"_ustr
, m_pDoc
->GetFormula(8, 105, srcSheet
));
5774 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.I6"_ustr
, m_pDoc
->GetFormula(8, 106, srcSheet
));
5775 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.I7"_ustr
, m_pDoc
->GetFormula(8, 107, srcSheet
));
5776 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.J1"_ustr
, m_pDoc
->GetFormula(9, 101, srcSheet
));
5777 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.J2"_ustr
, m_pDoc
->GetFormula(9, 102, srcSheet
));
5778 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.J3"_ustr
, m_pDoc
->GetFormula(9, 103, srcSheet
));
5779 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.J4"_ustr
, m_pDoc
->GetFormula(9, 104, srcSheet
));
5780 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.J5"_ustr
, m_pDoc
->GetFormula(9, 105, srcSheet
));
5781 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.J6"_ustr
, m_pDoc
->GetFormula(9, 106, srcSheet
));
5782 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.J7"_ustr
, m_pDoc
->GetFormula(9, 107, srcSheet
));
5784 m_pDoc
->DeleteTab(destSheet
);
5785 m_pDoc
->DeleteTab(srcSheet
);
5788 void TestCopyPaste::checkCopyPasteSpecialMultiRangeRowFiltered(bool bSkipEmpty
)
5790 const SCTAB srcSheet
= 0;
5791 const SCTAB destSheet
= 1;
5794 | D | E | F | G | H | I |
5796 2 | 1 B*| =D2+10 *| a | R1 *| =D2+D4+60 | =SUMIF(D2:D5;"<4") |
5797 3 | 3 B*| =G3+30 b*| c *| 5 *| B*| |
5799 4 | 6 | q | r | s | t | u |
5800 5 | -11 | -12 |-13 | -14 | -15 | -16 |
5802 * means note attached
5807 const EditTextObject
* pEditObj
;
5809 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(2, 0, destSheet
));
5810 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(2, 1, destSheet
));
5811 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(2, 2, destSheet
));
5812 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(2, 3, destSheet
));
5813 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(2, 4, destSheet
));
5814 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(2, 5, destSheet
));
5816 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(3, 0, destSheet
));
5817 CPPUNIT_ASSERT_EQUAL(1.0, m_pDoc
->GetValue(3, 1, destSheet
));
5818 CPPUNIT_ASSERT_EQUAL(3.0, m_pDoc
->GetValue(3, 2, destSheet
));
5819 CPPUNIT_ASSERT_EQUAL(6.0, m_pDoc
->GetValue(3, 3, destSheet
));
5820 CPPUNIT_ASSERT_EQUAL(-11.0, m_pDoc
->GetValue(3, 4, destSheet
));
5821 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(3, 5, destSheet
));
5823 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(4, 0, destSheet
));
5824 CPPUNIT_ASSERT_EQUAL(u
"1000"_ustr
, m_pDoc
->GetString(4, 0, destSheet
));
5825 CPPUNIT_ASSERT_EQUAL(11.0, m_pDoc
->GetValue(4, 1, destSheet
));
5826 CPPUNIT_ASSERT_EQUAL(u
"=D2+10"_ustr
, m_pDoc
->GetFormula(4, 1, destSheet
));
5827 CPPUNIT_ASSERT_EQUAL(u
"=G3+30"_ustr
, m_pDoc
->GetFormula(4, 2, destSheet
));
5828 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(4, 2, destSheet
));
5829 CPPUNIT_ASSERT_EQUAL(u
"q"_ustr
, m_pDoc
->GetString(4, 3, destSheet
));
5830 CPPUNIT_ASSERT_EQUAL(-12.0, m_pDoc
->GetValue(4, 4, destSheet
));
5831 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(4, 5, destSheet
));
5832 CPPUNIT_ASSERT_EQUAL(u
"1000"_ustr
, m_pDoc
->GetString(4, 5, destSheet
));
5834 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(5, 0, destSheet
));
5835 CPPUNIT_ASSERT_EQUAL(u
"1000"_ustr
, m_pDoc
->GetString(5, 0, destSheet
));
5836 CPPUNIT_ASSERT_EQUAL(u
"a"_ustr
, m_pDoc
->GetString(5, 1, destSheet
));
5837 CPPUNIT_ASSERT_EQUAL(u
"c"_ustr
, m_pDoc
->GetString(5, 2, destSheet
));
5838 CPPUNIT_ASSERT_EQUAL(u
"r"_ustr
, m_pDoc
->GetString(5, 3, destSheet
));
5839 CPPUNIT_ASSERT_EQUAL(-13.0, m_pDoc
->GetValue(5, 4, destSheet
));
5840 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(5, 5, destSheet
));
5841 CPPUNIT_ASSERT_EQUAL(u
"1000"_ustr
, m_pDoc
->GetString(5, 5, destSheet
));
5843 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(6, 0, destSheet
));
5844 pEditObj
= m_pDoc
->GetEditText(ScAddress(6, 0, destSheet
));
5845 CPPUNIT_ASSERT(pEditObj
== nullptr);
5846 pEditObj
= m_pDoc
->GetEditText(ScAddress(6, 1, destSheet
));
5847 CPPUNIT_ASSERT(pEditObj
);
5848 CPPUNIT_ASSERT_EQUAL(u
"R1"_ustr
, pEditObj
->GetText(0));
5849 CPPUNIT_ASSERT_EQUAL(5.0, m_pDoc
->GetValue(6, 2, destSheet
));
5850 CPPUNIT_ASSERT_EQUAL(u
"s"_ustr
, m_pDoc
->GetString(6, 3, destSheet
));
5851 CPPUNIT_ASSERT_EQUAL(-14.0, m_pDoc
->GetValue(6, 4, destSheet
));
5852 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(6, 5, destSheet
));
5853 pEditObj
= m_pDoc
->GetEditText(ScAddress(6, 5, destSheet
));
5854 CPPUNIT_ASSERT(pEditObj
== nullptr);
5856 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(7, 0, destSheet
));
5857 CPPUNIT_ASSERT_EQUAL(u
"1000"_ustr
, m_pDoc
->GetString(7, 0, destSheet
));
5858 CPPUNIT_ASSERT_EQUAL(u
"=D2+D4+60"_ustr
, m_pDoc
->GetFormula(7, 1, destSheet
));
5859 CPPUNIT_ASSERT_EQUAL(67.0, m_pDoc
->GetValue(7, 1, destSheet
));
5861 CPPUNIT_ASSERT_EQUAL(OUString(), m_pDoc
->GetString(7, 2, destSheet
));
5863 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(7, 2, destSheet
));
5864 CPPUNIT_ASSERT_EQUAL(u
"t"_ustr
, m_pDoc
->GetString(7, 3, destSheet
));
5865 CPPUNIT_ASSERT_EQUAL(-15.0, m_pDoc
->GetValue(7, 4, destSheet
));
5866 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(7, 5, destSheet
));
5867 CPPUNIT_ASSERT_EQUAL(u
"1000"_ustr
, m_pDoc
->GetString(7, 5, destSheet
));
5869 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(8, 0, destSheet
));
5870 CPPUNIT_ASSERT_EQUAL(u
"1000"_ustr
, m_pDoc
->GetString(8, 0, destSheet
));
5871 CPPUNIT_ASSERT_EQUAL(u
"=SUMIF(D2:D5;\"<4\")"_ustr
, m_pDoc
->GetFormula(8, 1, destSheet
));
5872 CPPUNIT_ASSERT_EQUAL(6.0, m_pDoc
->GetValue(8, 1, destSheet
));
5874 CPPUNIT_ASSERT_EQUAL(OUString(), m_pDoc
->GetString(8, 2, destSheet
));
5876 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(8, 2, destSheet
));
5877 CPPUNIT_ASSERT_EQUAL(u
"u"_ustr
, m_pDoc
->GetString(8, 3, destSheet
));
5878 CPPUNIT_ASSERT_EQUAL(-16.0, m_pDoc
->GetValue(8, 4, destSheet
));
5879 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(8, 5, destSheet
));
5880 CPPUNIT_ASSERT_EQUAL(u
"1000"_ustr
, m_pDoc
->GetString(8, 5, destSheet
));
5882 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(9, 0, destSheet
));
5883 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(9, 1, destSheet
));
5884 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(9, 2, destSheet
));
5885 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(9, 3, destSheet
));
5886 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(9, 4, destSheet
));
5887 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(9, 5, destSheet
));
5890 const SfxPoolItem
* pItem
= nullptr;
5891 m_pDoc
->GetPattern(ScAddress(3, 1, destSheet
))->GetItemSet().HasItem(ATTR_BACKGROUND
, &pItem
);
5892 CPPUNIT_ASSERT(pItem
);
5893 CPPUNIT_ASSERT_EQUAL(COL_BLUE
, static_cast<const SvxBrushItem
*>(pItem
)->GetColor());
5894 m_pDoc
->GetPattern(ScAddress(3, 2, destSheet
))->GetItemSet().HasItem(ATTR_BACKGROUND
, &pItem
);
5895 CPPUNIT_ASSERT_EQUAL(COL_BLUE
, static_cast<const SvxBrushItem
*>(pItem
)->GetColor());
5896 m_pDoc
->GetPattern(ScAddress(3, 3, destSheet
))->GetItemSet().HasItem(ATTR_BACKGROUND
, &pItem
);
5897 CPPUNIT_ASSERT(!pItem
);
5898 m_pDoc
->GetPattern(ScAddress(3, 4, destSheet
))->GetItemSet().HasItem(ATTR_BACKGROUND
, &pItem
);
5899 CPPUNIT_ASSERT(!pItem
);
5900 m_pDoc
->GetPattern(ScAddress(7, 2, destSheet
))->GetItemSet().HasItem(ATTR_BACKGROUND
, &pItem
);
5901 CPPUNIT_ASSERT_EQUAL(bSkipEmpty
, pItem
== nullptr);
5903 CPPUNIT_ASSERT_EQUAL(COL_GREEN
, static_cast<const SvxBrushItem
*>(pItem
)->GetColor());
5905 m_pDoc
->GetPattern(ScAddress(4, 3, destSheet
))->GetItemSet().HasItem(ATTR_BACKGROUND
, &pItem
);
5906 CPPUNIT_ASSERT(!pItem
);
5907 m_pDoc
->GetPattern(ScAddress(5, 3, destSheet
))->GetItemSet().HasItem(ATTR_BACKGROUND
, &pItem
);
5908 CPPUNIT_ASSERT(pItem
);
5909 CPPUNIT_ASSERT_EQUAL(COL_RED
, static_cast<const SvxBrushItem
*>(pItem
)->GetColor());
5910 m_pDoc
->GetPattern(ScAddress(6, 3, destSheet
))->GetItemSet().HasItem(ATTR_BACKGROUND
, &pItem
);
5911 CPPUNIT_ASSERT(pItem
);
5912 CPPUNIT_ASSERT_EQUAL(COL_RED
, static_cast<const SvxBrushItem
*>(pItem
)->GetColor());
5913 m_pDoc
->GetPattern(ScAddress(7, 3, destSheet
))->GetItemSet().HasItem(ATTR_BACKGROUND
, &pItem
);
5914 CPPUNIT_ASSERT(!pItem
);
5916 // check border, left and right borders were transformed to top and bottom borders
5917 pItem
= m_pDoc
->GetAttr(ScAddress(4, 1, destSheet
), ATTR_BORDER
);
5918 CPPUNIT_ASSERT(pItem
);
5919 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetTop());
5920 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetBottom());
5921 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetLeft());
5922 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetRight());
5923 pItem
= m_pDoc
->GetAttr(ScAddress(4, 2, destSheet
), ATTR_BORDER
);
5924 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetTop());
5925 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetBottom());
5926 CPPUNIT_ASSERT(static_cast<const SvxBoxItem
*>(pItem
)->GetLeft());
5927 CPPUNIT_ASSERT(static_cast<const SvxBoxItem
*>(pItem
)->GetRight());
5928 pItem
= m_pDoc
->GetAttr(ScAddress(4, 3, destSheet
), ATTR_BORDER
);
5929 CPPUNIT_ASSERT(pItem
);
5930 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetTop());
5931 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetBottom());
5932 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetLeft());
5933 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetRight());
5934 pItem
= m_pDoc
->GetAttr(ScAddress(4, 4, destSheet
), ATTR_BORDER
);
5935 CPPUNIT_ASSERT(pItem
);
5936 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetTop());
5937 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetBottom());
5938 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetLeft());
5939 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetRight());
5941 pItem
= m_pDoc
->GetAttr(ScAddress(3, 3, destSheet
), ATTR_BORDER
);
5942 CPPUNIT_ASSERT(pItem
);
5943 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetTop());
5944 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetBottom());
5945 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetLeft());
5946 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetRight());
5947 pItem
= m_pDoc
->GetAttr(ScAddress(4, 3, destSheet
), ATTR_BORDER
);
5948 CPPUNIT_ASSERT(pItem
);
5949 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetTop());
5950 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetBottom());
5951 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetLeft());
5952 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetRight());
5953 pItem
= m_pDoc
->GetAttr(ScAddress(5, 3, destSheet
), ATTR_BORDER
);
5954 CPPUNIT_ASSERT(static_cast<const SvxBoxItem
*>(pItem
)->GetTop());
5955 CPPUNIT_ASSERT(static_cast<const SvxBoxItem
*>(pItem
)->GetBottom());
5956 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetLeft());
5957 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetRight());
5958 pItem
= m_pDoc
->GetAttr(ScAddress(6, 3, destSheet
), ATTR_BORDER
);
5959 CPPUNIT_ASSERT(pItem
);
5960 CPPUNIT_ASSERT(static_cast<const SvxBoxItem
*>(pItem
)->GetTop());
5961 CPPUNIT_ASSERT(static_cast<const SvxBoxItem
*>(pItem
)->GetBottom());
5962 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetLeft());
5963 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetRight());
5964 pItem
= m_pDoc
->GetAttr(ScAddress(7, 3, destSheet
), ATTR_BORDER
);
5965 CPPUNIT_ASSERT(pItem
);
5966 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetTop());
5967 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetBottom());
5968 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetLeft());
5969 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetRight());
5971 // check notes after transposed copy/paste
5972 // check presence of notes
5973 CPPUNIT_ASSERT(!m_pDoc
->HasNote(2, 0, destSheet
));
5974 CPPUNIT_ASSERT(!m_pDoc
->HasNote(3, 0, destSheet
));
5975 CPPUNIT_ASSERT(!m_pDoc
->HasNote(4, 0, destSheet
));
5976 CPPUNIT_ASSERT(!m_pDoc
->HasNote(5, 0, destSheet
));
5977 CPPUNIT_ASSERT(!m_pDoc
->HasNote(6, 0, destSheet
));
5978 CPPUNIT_ASSERT(!m_pDoc
->HasNote(7, 0, destSheet
));
5979 CPPUNIT_ASSERT(!m_pDoc
->HasNote(8, 0, destSheet
));
5980 CPPUNIT_ASSERT(!m_pDoc
->HasNote(9, 0, destSheet
));
5981 CPPUNIT_ASSERT(!m_pDoc
->HasNote(2, 1, destSheet
));
5982 CPPUNIT_ASSERT(m_pDoc
->HasNote(3, 1, destSheet
));
5983 CPPUNIT_ASSERT(m_pDoc
->HasNote(4, 1, destSheet
));
5984 CPPUNIT_ASSERT(!m_pDoc
->HasNote(5, 1, destSheet
));
5985 CPPUNIT_ASSERT(m_pDoc
->HasNote(6, 1, destSheet
));
5986 CPPUNIT_ASSERT(!m_pDoc
->HasNote(7, 1, destSheet
));
5987 CPPUNIT_ASSERT(!m_pDoc
->HasNote(8, 1, destSheet
));
5988 CPPUNIT_ASSERT(!m_pDoc
->HasNote(9, 1, destSheet
));
5989 CPPUNIT_ASSERT(!m_pDoc
->HasNote(2, 2, destSheet
));
5990 CPPUNIT_ASSERT(m_pDoc
->HasNote(3, 2, destSheet
));
5991 CPPUNIT_ASSERT(m_pDoc
->HasNote(4, 2, destSheet
));
5992 CPPUNIT_ASSERT(m_pDoc
->HasNote(5, 2, destSheet
));
5993 CPPUNIT_ASSERT(m_pDoc
->HasNote(6, 2, destSheet
));
5994 CPPUNIT_ASSERT_EQUAL(!bSkipEmpty
, m_pDoc
->HasNote(7, 2, destSheet
));
5995 CPPUNIT_ASSERT(!m_pDoc
->HasNote(8, 2, destSheet
));
5996 CPPUNIT_ASSERT(!m_pDoc
->HasNote(9, 2, destSheet
));
5997 CPPUNIT_ASSERT(!m_pDoc
->HasNote(2, 3, destSheet
));
5998 CPPUNIT_ASSERT(!m_pDoc
->HasNote(3, 3, destSheet
));
5999 CPPUNIT_ASSERT(!m_pDoc
->HasNote(4, 3, destSheet
));
6000 CPPUNIT_ASSERT(m_pDoc
->HasNote(5, 3, destSheet
));
6001 CPPUNIT_ASSERT(!m_pDoc
->HasNote(6, 3, destSheet
));
6002 CPPUNIT_ASSERT(!m_pDoc
->HasNote(7, 3, destSheet
));
6003 CPPUNIT_ASSERT(!m_pDoc
->HasNote(8, 3, destSheet
));
6004 CPPUNIT_ASSERT(!m_pDoc
->HasNote(9, 3, destSheet
));
6005 CPPUNIT_ASSERT(!m_pDoc
->HasNote(2, 4, destSheet
));
6006 CPPUNIT_ASSERT(!m_pDoc
->HasNote(3, 4, destSheet
));
6007 CPPUNIT_ASSERT(!m_pDoc
->HasNote(4, 4, destSheet
));
6008 CPPUNIT_ASSERT(!m_pDoc
->HasNote(5, 4, destSheet
));
6009 CPPUNIT_ASSERT(!m_pDoc
->HasNote(6, 4, destSheet
));
6010 CPPUNIT_ASSERT(!m_pDoc
->HasNote(7, 4, destSheet
));
6011 CPPUNIT_ASSERT(!m_pDoc
->HasNote(8, 4, destSheet
));
6012 CPPUNIT_ASSERT(!m_pDoc
->HasNote(9, 4, destSheet
));
6014 // check values of notes
6015 CPPUNIT_ASSERT_EQUAL(u
"Note A1"_ustr
, getNote(3, 1, destSheet
));
6016 CPPUNIT_ASSERT_EQUAL(u
"Note A3"_ustr
, getNote(3, 2, destSheet
));
6017 CPPUNIT_ASSERT_EQUAL(u
"Note B1"_ustr
, getNote(4, 1, destSheet
));
6018 CPPUNIT_ASSERT_EQUAL(u
"Note B3"_ustr
, getNote(4, 2, destSheet
));
6019 CPPUNIT_ASSERT_EQUAL(u
"Note C3"_ustr
, getNote(5, 2, destSheet
));
6020 CPPUNIT_ASSERT_EQUAL(u
"Note D1"_ustr
, getNote(6, 1, destSheet
));
6021 CPPUNIT_ASSERT_EQUAL(u
"Note D3"_ustr
, getNote(6, 2, destSheet
));
6023 CPPUNIT_ASSERT_EQUAL(u
"Note E2"_ustr
, getNote(7, 2, destSheet
));
6024 CPPUNIT_ASSERT_EQUAL(u
"Note C5"_ustr
, getNote(5, 3, destSheet
));
6026 // check row 16 on src sheet, refs to copied/cut range
6027 CPPUNIT_ASSERT_EQUAL(u
"=C5"_ustr
, m_pDoc
->GetFormula(1, 16, srcSheet
));
6028 CPPUNIT_ASSERT_EQUAL(u
"=$C$5"_ustr
, m_pDoc
->GetFormula(2, 16, srcSheet
));
6029 CPPUNIT_ASSERT_EQUAL(u
"=$C5"_ustr
, m_pDoc
->GetFormula(3, 16, srcSheet
));
6030 CPPUNIT_ASSERT_EQUAL(u
"=C$5"_ustr
, m_pDoc
->GetFormula(4, 16, srcSheet
));
6031 CPPUNIT_ASSERT_EQUAL(u
"=SUM(C5:C5)"_ustr
, m_pDoc
->GetFormula(5, 16, srcSheet
));
6032 CPPUNIT_ASSERT_EQUAL(u
"=SUM($C$5:$C$5)"_ustr
, m_pDoc
->GetFormula(6, 16, srcSheet
));
6033 CPPUNIT_ASSERT_EQUAL(u
"=SUM($C5:$C5)"_ustr
, m_pDoc
->GetFormula(7, 16, srcSheet
));
6034 CPPUNIT_ASSERT_EQUAL(u
"=SUM(C$5:C$5)"_ustr
, m_pDoc
->GetFormula(8, 16, srcSheet
));
6035 CPPUNIT_ASSERT_EQUAL(u
"=SUM($B$3:$B$6)"_ustr
, m_pDoc
->GetFormula(9, 16, srcSheet
));
6036 CPPUNIT_ASSERT_EQUAL(u
"=SUM($B$3:$B$10)"_ustr
, m_pDoc
->GetFormula(10, 16, srcSheet
));
6038 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(1, 16, srcSheet
));
6039 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(2, 16, srcSheet
));
6040 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(3, 16, srcSheet
));
6041 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(4, 16, srcSheet
));
6042 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(5, 16, srcSheet
));
6043 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(6, 16, srcSheet
));
6044 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(7, 16, srcSheet
));
6045 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(8, 16, srcSheet
));
6046 CPPUNIT_ASSERT_EQUAL(10.0, m_pDoc
->GetValue(9, 16, srcSheet
));
6047 CPPUNIT_ASSERT_EQUAL(-17.0, m_pDoc
->GetValue(10, 16, srcSheet
));
6049 CPPUNIT_ASSERT_EQUAL(u
"=Range_C5"_ustr
, m_pDoc
->GetFormula(1, 17, srcSheet
));
6050 CPPUNIT_ASSERT_EQUAL(u
"=Range_aCa5"_ustr
, m_pDoc
->GetFormula(2, 17, srcSheet
));
6051 CPPUNIT_ASSERT_EQUAL(u
"=Range_aC5"_ustr
, m_pDoc
->GetFormula(3, 17, srcSheet
));
6052 CPPUNIT_ASSERT_EQUAL(u
"=Range_Ca5"_ustr
, m_pDoc
->GetFormula(4, 17, srcSheet
));
6053 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_C5_C5)"_ustr
, m_pDoc
->GetFormula(5, 17, srcSheet
));
6054 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_aCa5_aCa5)"_ustr
, m_pDoc
->GetFormula(6, 17, srcSheet
));
6055 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_aC5_aC5)"_ustr
, m_pDoc
->GetFormula(7, 17, srcSheet
));
6056 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_Ca5_Ca5)"_ustr
, m_pDoc
->GetFormula(8, 17, srcSheet
));
6057 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_aCa5_aCa8)"_ustr
, m_pDoc
->GetFormula(9, 17, srcSheet
));
6058 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_aCa5_aCa10)"_ustr
, m_pDoc
->GetFormula(10, 17, srcSheet
));
6060 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(1, 17, srcSheet
));
6061 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(2, 17, srcSheet
));
6062 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(3, 17, srcSheet
));
6063 CPPUNIT_ASSERT_EQUAL(5.0, m_pDoc
->GetValue(4, 17, srcSheet
));
6064 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(5, 17, srcSheet
));
6065 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(6, 17, srcSheet
));
6066 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(7, 17, srcSheet
));
6067 CPPUNIT_ASSERT_EQUAL(123.0, m_pDoc
->GetValue(8, 17, srcSheet
));
6068 CPPUNIT_ASSERT_EQUAL(10.0, m_pDoc
->GetValue(9, 17, srcSheet
));
6069 CPPUNIT_ASSERT_EQUAL(-17.0, m_pDoc
->GetValue(10, 17, srcSheet
));
6071 // Existing references to the destination range must not change
6072 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.D1"_ustr
, m_pDoc
->GetFormula(3, 101, srcSheet
));
6073 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.D2"_ustr
, m_pDoc
->GetFormula(3, 102, srcSheet
));
6074 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.D3"_ustr
, m_pDoc
->GetFormula(3, 103, srcSheet
));
6075 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.D4"_ustr
, m_pDoc
->GetFormula(3, 104, srcSheet
));
6076 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.D5"_ustr
, m_pDoc
->GetFormula(3, 105, srcSheet
));
6077 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.D6"_ustr
, m_pDoc
->GetFormula(3, 106, srcSheet
));
6078 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.D7"_ustr
, m_pDoc
->GetFormula(3, 107, srcSheet
));
6079 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.E1"_ustr
, m_pDoc
->GetFormula(4, 101, srcSheet
));
6080 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.E2"_ustr
, m_pDoc
->GetFormula(4, 102, srcSheet
));
6081 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.E3"_ustr
, m_pDoc
->GetFormula(4, 103, srcSheet
));
6082 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.E4"_ustr
, m_pDoc
->GetFormula(4, 104, srcSheet
));
6083 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.E5"_ustr
, m_pDoc
->GetFormula(4, 105, srcSheet
));
6084 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.E6"_ustr
, m_pDoc
->GetFormula(4, 106, srcSheet
));
6085 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.E7"_ustr
, m_pDoc
->GetFormula(4, 107, srcSheet
));
6086 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.F1"_ustr
, m_pDoc
->GetFormula(5, 101, srcSheet
));
6087 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.F2"_ustr
, m_pDoc
->GetFormula(5, 102, srcSheet
));
6088 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.F3"_ustr
, m_pDoc
->GetFormula(5, 103, srcSheet
));
6089 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.F4"_ustr
, m_pDoc
->GetFormula(5, 104, srcSheet
));
6090 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.F5"_ustr
, m_pDoc
->GetFormula(5, 105, srcSheet
));
6091 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.F6"_ustr
, m_pDoc
->GetFormula(5, 106, srcSheet
));
6092 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.F7"_ustr
, m_pDoc
->GetFormula(5, 107, srcSheet
));
6093 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.G1"_ustr
, m_pDoc
->GetFormula(6, 101, srcSheet
));
6094 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.G2"_ustr
, m_pDoc
->GetFormula(6, 102, srcSheet
));
6095 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.G3"_ustr
, m_pDoc
->GetFormula(6, 103, srcSheet
));
6096 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.G4"_ustr
, m_pDoc
->GetFormula(6, 104, srcSheet
));
6097 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.G5"_ustr
, m_pDoc
->GetFormula(6, 105, srcSheet
));
6098 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.G6"_ustr
, m_pDoc
->GetFormula(6, 106, srcSheet
));
6099 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.G7"_ustr
, m_pDoc
->GetFormula(6, 107, srcSheet
));
6100 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.H1"_ustr
, m_pDoc
->GetFormula(7, 101, srcSheet
));
6101 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.H2"_ustr
, m_pDoc
->GetFormula(7, 102, srcSheet
));
6102 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.H3"_ustr
, m_pDoc
->GetFormula(7, 103, srcSheet
));
6103 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.H4"_ustr
, m_pDoc
->GetFormula(7, 104, srcSheet
));
6104 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.H5"_ustr
, m_pDoc
->GetFormula(7, 105, srcSheet
));
6105 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.H6"_ustr
, m_pDoc
->GetFormula(7, 106, srcSheet
));
6106 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.H7"_ustr
, m_pDoc
->GetFormula(7, 107, srcSheet
));
6107 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.I1"_ustr
, m_pDoc
->GetFormula(8, 101, srcSheet
));
6108 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.I2"_ustr
, m_pDoc
->GetFormula(8, 102, srcSheet
));
6109 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.I3"_ustr
, m_pDoc
->GetFormula(8, 103, srcSheet
));
6110 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.I4"_ustr
, m_pDoc
->GetFormula(8, 104, srcSheet
));
6111 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.I5"_ustr
, m_pDoc
->GetFormula(8, 105, srcSheet
));
6112 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.I6"_ustr
, m_pDoc
->GetFormula(8, 106, srcSheet
));
6113 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.I7"_ustr
, m_pDoc
->GetFormula(8, 107, srcSheet
));
6114 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.J1"_ustr
, m_pDoc
->GetFormula(9, 101, srcSheet
));
6115 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.J2"_ustr
, m_pDoc
->GetFormula(9, 102, srcSheet
));
6116 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.J3"_ustr
, m_pDoc
->GetFormula(9, 103, srcSheet
));
6117 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.J4"_ustr
, m_pDoc
->GetFormula(9, 104, srcSheet
));
6118 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.J5"_ustr
, m_pDoc
->GetFormula(9, 105, srcSheet
));
6119 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.J6"_ustr
, m_pDoc
->GetFormula(9, 106, srcSheet
));
6120 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.J7"_ustr
, m_pDoc
->GetFormula(9, 107, srcSheet
));
6122 m_pDoc
->DeleteTab(destSheet
);
6123 m_pDoc
->DeleteTab(srcSheet
);
6126 void TestCopyPaste::checkCopyPasteSpecialMultiRangeRowTranspose(bool bSkipEmpty
)
6128 const SCTAB srcSheet
= 0;
6129 const SCTAB destSheet
= 1;
6132 | D | E | F | G | H |
6134 2 | 1 B*| 2 B*| 3 B*| 6 | -11 |
6135 3 | =D2+10 *| =E2+20 b | =F5+30 b*| q | -12 |
6136 4 | a | b *| c *| r | -13 |
6137 5 | R1 *| R2 *| 5 *| s | -14 |
6138 6 | =D2+F2+60 | | B*| t | -15 |
6139 7 | =SUMIF(D2:G2;"<4") | *| | u | -16 |
6141 * means note attached
6146 //check cell content after transposed copy/paste of filtered data
6147 // Note: column F is a repetition of srcSheet.Column A
6148 // Col C and G are checked to be empty
6149 const EditTextObject
* pEditObj
;
6151 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(2, 0, destSheet
));
6152 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(3, 0, destSheet
));
6153 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(4, 0, destSheet
));
6154 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(5, 0, destSheet
));
6155 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(6, 0, destSheet
));
6156 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(7, 0, destSheet
));
6158 CPPUNIT_ASSERT_EQUAL_MESSAGE("transposed cell C2", 1000.0, m_pDoc
->GetValue(2, 1, destSheet
));
6159 CPPUNIT_ASSERT_EQUAL_MESSAGE("transposed cell D2", 1.0, m_pDoc
->GetValue(3, 1, destSheet
));
6160 CPPUNIT_ASSERT_EQUAL_MESSAGE("transposed cell E2", 2.0, m_pDoc
->GetValue(4, 1, destSheet
));
6161 CPPUNIT_ASSERT_EQUAL_MESSAGE("transposed cell F2", 3.0, m_pDoc
->GetValue(5, 1, destSheet
));
6162 CPPUNIT_ASSERT_EQUAL_MESSAGE("transposed cell G2", 6.0, m_pDoc
->GetValue(6, 1, destSheet
));
6163 CPPUNIT_ASSERT_EQUAL(-11.0, m_pDoc
->GetValue(7, 1, destSheet
));
6164 CPPUNIT_ASSERT_EQUAL_MESSAGE("transposed cell I2", 1000.0, m_pDoc
->GetValue(8, 1, destSheet
));
6166 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(2, 2, destSheet
));
6167 CPPUNIT_ASSERT_EQUAL(u
"1000"_ustr
, m_pDoc
->GetString(2, 2, destSheet
));
6168 CPPUNIT_ASSERT_EQUAL_MESSAGE("transposed D3", 11.0, m_pDoc
->GetValue(3, 2, destSheet
));
6169 CPPUNIT_ASSERT_EQUAL_MESSAGE("transposed D3", u
"=D2+10"_ustr
,
6170 m_pDoc
->GetFormula(3, 2, destSheet
));
6171 CPPUNIT_ASSERT_EQUAL_MESSAGE("transposed E3", u
"=E2+20"_ustr
,
6172 m_pDoc
->GetFormula(4, 2, destSheet
));
6173 CPPUNIT_ASSERT_EQUAL_MESSAGE("transposed E3", 22.0, m_pDoc
->GetValue(4, 2, destSheet
));
6174 CPPUNIT_ASSERT_EQUAL_MESSAGE("transposed F3", 35.0, m_pDoc
->GetValue(5, 2, destSheet
));
6175 CPPUNIT_ASSERT_EQUAL_MESSAGE("transposed F3", u
"=F5+30"_ustr
,
6176 m_pDoc
->GetFormula(5, 2, destSheet
));
6177 CPPUNIT_ASSERT_EQUAL_MESSAGE("Cell G4", u
"q"_ustr
, m_pDoc
->GetString(6, 2, destSheet
));
6178 CPPUNIT_ASSERT_EQUAL(-12.0, m_pDoc
->GetValue(7, 2, destSheet
));
6179 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(8, 2, destSheet
));
6180 CPPUNIT_ASSERT_EQUAL(u
"1000"_ustr
, m_pDoc
->GetString(8, 2, destSheet
));
6182 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(2, 3, destSheet
));
6183 CPPUNIT_ASSERT_EQUAL(u
"1000"_ustr
, m_pDoc
->GetString(2, 3, destSheet
));
6184 CPPUNIT_ASSERT_EQUAL_MESSAGE("Cell D4", u
"a"_ustr
, m_pDoc
->GetString(3, 3, destSheet
));
6185 CPPUNIT_ASSERT_EQUAL_MESSAGE("Cell E4", u
"b"_ustr
, m_pDoc
->GetString(4, 3, destSheet
));
6186 CPPUNIT_ASSERT_EQUAL_MESSAGE("Cell F4", u
"c"_ustr
, m_pDoc
->GetString(5, 3, destSheet
));
6187 CPPUNIT_ASSERT_EQUAL_MESSAGE("Cell G4", u
"r"_ustr
, m_pDoc
->GetString(6, 3, destSheet
));
6188 CPPUNIT_ASSERT_EQUAL(-13.0, m_pDoc
->GetValue(7, 3, destSheet
));
6189 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(8, 3, destSheet
));
6190 CPPUNIT_ASSERT_EQUAL(u
"1000"_ustr
, m_pDoc
->GetString(8, 3, destSheet
));
6192 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(2, 4, destSheet
));
6193 pEditObj
= m_pDoc
->GetEditText(ScAddress(2, 4, destSheet
));
6194 CPPUNIT_ASSERT_MESSAGE("There should be no edit cell in C5.", pEditObj
== nullptr);
6195 pEditObj
= m_pDoc
->GetEditText(ScAddress(3, 4, destSheet
));
6196 CPPUNIT_ASSERT_MESSAGE("There should be an edit cell in D5.", pEditObj
);
6197 CPPUNIT_ASSERT_EQUAL_MESSAGE("Edit cell value wrong in D5 ", u
"R1"_ustr
, pEditObj
->GetText(0));
6198 pEditObj
= m_pDoc
->GetEditText(ScAddress(4, 4, destSheet
));
6199 CPPUNIT_ASSERT_MESSAGE("There should be an edit cell in E5.", pEditObj
);
6200 CPPUNIT_ASSERT_EQUAL_MESSAGE("Edit cell value wrong E5.", u
"R2"_ustr
, pEditObj
->GetText(0));
6201 CPPUNIT_ASSERT_EQUAL_MESSAGE("transposed cell F5", 5.0, m_pDoc
->GetValue(5, 4, destSheet
));
6202 CPPUNIT_ASSERT_EQUAL_MESSAGE("Cell G5", u
"s"_ustr
, m_pDoc
->GetString(6, 4, destSheet
));
6203 CPPUNIT_ASSERT_EQUAL(-14.0, m_pDoc
->GetValue(7, 4, destSheet
));
6204 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(8, 4, destSheet
));
6205 pEditObj
= m_pDoc
->GetEditText(ScAddress(8, 4, destSheet
));
6206 CPPUNIT_ASSERT_MESSAGE("There should be no edit cell in I5.", pEditObj
== nullptr);
6208 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(2, 5, destSheet
));
6209 CPPUNIT_ASSERT_EQUAL(u
"1000"_ustr
, m_pDoc
->GetString(2, 5, destSheet
));
6210 CPPUNIT_ASSERT_EQUAL_MESSAGE("transposed D6", u
"=D2+F2+60"_ustr
,
6211 m_pDoc
->GetFormula(3, 5, destSheet
));
6212 CPPUNIT_ASSERT_EQUAL_MESSAGE("transposed D6", 64.0, m_pDoc
->GetValue(3, 5, destSheet
));
6215 CPPUNIT_ASSERT_EQUAL_MESSAGE("Cell E6", OUString(), m_pDoc
->GetString(4, 5, destSheet
));
6216 CPPUNIT_ASSERT_EQUAL_MESSAGE("Cell E6", OUString(), m_pDoc
->GetString(5, 5, destSheet
));
6220 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(4, 5, destSheet
));
6221 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(5, 5, destSheet
));
6223 CPPUNIT_ASSERT_EQUAL_MESSAGE("Cell G6", u
"t"_ustr
, m_pDoc
->GetString(6, 5, destSheet
));
6224 CPPUNIT_ASSERT_EQUAL(-15.0, m_pDoc
->GetValue(7, 5, destSheet
));
6225 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(8, 5, destSheet
));
6226 CPPUNIT_ASSERT_EQUAL(u
"1000"_ustr
, m_pDoc
->GetString(8, 5, destSheet
));
6228 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(2, 6, destSheet
));
6229 CPPUNIT_ASSERT_EQUAL(u
"1000"_ustr
, m_pDoc
->GetString(2, 6, destSheet
));
6230 CPPUNIT_ASSERT_EQUAL_MESSAGE("transposed D7", u
"=SUMIF(D2:G2;\"<4\")"_ustr
,
6231 m_pDoc
->GetFormula(3, 6, destSheet
));
6232 CPPUNIT_ASSERT_EQUAL_MESSAGE("transposed D7", 6.0, m_pDoc
->GetValue(3, 6, destSheet
));
6235 CPPUNIT_ASSERT_EQUAL_MESSAGE("Cell E6", OUString(), m_pDoc
->GetString(4, 6, destSheet
));
6236 CPPUNIT_ASSERT_EQUAL_MESSAGE("Cell E6", OUString(), m_pDoc
->GetString(5, 6, destSheet
));
6240 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(4, 6, destSheet
));
6241 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(5, 6, destSheet
));
6243 CPPUNIT_ASSERT_EQUAL_MESSAGE("Cell G7", u
"u"_ustr
, m_pDoc
->GetString(6, 6, destSheet
));
6244 CPPUNIT_ASSERT_EQUAL(-16.0, m_pDoc
->GetValue(7, 6, destSheet
));
6245 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(8, 6, destSheet
));
6246 CPPUNIT_ASSERT_EQUAL(u
"1000"_ustr
, m_pDoc
->GetString(8, 6, destSheet
));
6248 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(2, 7, destSheet
));
6249 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(3, 7, destSheet
));
6250 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(4, 7, destSheet
));
6251 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(5, 7, destSheet
));
6252 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(6, 7, destSheet
));
6253 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(7, 7, destSheet
));
6256 const SfxPoolItem
* pItem
= nullptr;
6257 m_pDoc
->GetPattern(ScAddress(3, 1, destSheet
))->GetItemSet().HasItem(ATTR_BACKGROUND
, &pItem
);
6258 CPPUNIT_ASSERT_MESSAGE("D2 has a pattern", pItem
);
6259 CPPUNIT_ASSERT_EQUAL_MESSAGE("D2 has blue background", COL_BLUE
,
6260 static_cast<const SvxBrushItem
*>(pItem
)->GetColor());
6261 m_pDoc
->GetPattern(ScAddress(4, 1, destSheet
))->GetItemSet().HasItem(ATTR_BACKGROUND
, &pItem
);
6262 CPPUNIT_ASSERT_MESSAGE("E2 has a pattern", pItem
);
6263 CPPUNIT_ASSERT_EQUAL_MESSAGE("E2 has blue background", COL_BLUE
,
6264 static_cast<const SvxBrushItem
*>(pItem
)->GetColor());
6265 m_pDoc
->GetPattern(ScAddress(5, 1, destSheet
))->GetItemSet().HasItem(ATTR_BACKGROUND
, &pItem
);
6266 CPPUNIT_ASSERT_MESSAGE("F2 has a pattern", pItem
);
6267 CPPUNIT_ASSERT_EQUAL_MESSAGE("F2 has a pattern", COL_BLUE
,
6268 static_cast<const SvxBrushItem
*>(pItem
)->GetColor());
6269 m_pDoc
->GetPattern(ScAddress(6, 1, destSheet
))->GetItemSet().HasItem(ATTR_BACKGROUND
, &pItem
);
6270 CPPUNIT_ASSERT_MESSAGE("G2 has no pattern", !pItem
);
6271 m_pDoc
->GetPattern(ScAddress(7, 1, destSheet
))->GetItemSet().HasItem(ATTR_BACKGROUND
, &pItem
);
6272 CPPUNIT_ASSERT_MESSAGE("H2 has no pattern", !pItem
);
6273 m_pDoc
->GetPattern(ScAddress(5, 5, destSheet
))->GetItemSet().HasItem(ATTR_BACKGROUND
, &pItem
);
6274 CPPUNIT_ASSERT_EQUAL(bSkipEmpty
, pItem
== nullptr);
6276 CPPUNIT_ASSERT_EQUAL(COL_GREEN
, static_cast<const SvxBrushItem
*>(pItem
)->GetColor());
6278 // check border, left and right borders were transformed to top and bottom borders
6279 pItem
= m_pDoc
->GetAttr(ScAddress(3, 2, destSheet
), ATTR_BORDER
);
6280 CPPUNIT_ASSERT_MESSAGE("D3 has a border", pItem
);
6281 CPPUNIT_ASSERT_MESSAGE("D3 has no top border",
6282 !static_cast<const SvxBoxItem
*>(pItem
)->GetTop());
6283 CPPUNIT_ASSERT_MESSAGE("D3 has no bottom border",
6284 !static_cast<const SvxBoxItem
*>(pItem
)->GetBottom());
6285 CPPUNIT_ASSERT_MESSAGE("D3 has no left border",
6286 !static_cast<const SvxBoxItem
*>(pItem
)->GetLeft());
6287 CPPUNIT_ASSERT_MESSAGE("D3 has no right border",
6288 !static_cast<const SvxBoxItem
*>(pItem
)->GetRight());
6290 m_pDoc
->GetPattern(ScAddress(4, 2, destSheet
))->GetItemSet().HasItem(ATTR_BORDER
, &pItem
);
6291 CPPUNIT_ASSERT_MESSAGE("E3 has a border", pItem
);
6292 CPPUNIT_ASSERT_MESSAGE("E3 has top border", static_cast<const SvxBoxItem
*>(pItem
)->GetTop());
6294 pItem
= m_pDoc
->GetAttr(ScAddress(4, 2, destSheet
), ATTR_BORDER
);
6295 CPPUNIT_ASSERT_MESSAGE("E3 has a border", pItem
);
6296 CPPUNIT_ASSERT_MESSAGE("E3 has top border", static_cast<const SvxBoxItem
*>(pItem
)->GetTop());
6297 CPPUNIT_ASSERT_MESSAGE("E3 has bottom border",
6298 static_cast<const SvxBoxItem
*>(pItem
)->GetBottom());
6299 CPPUNIT_ASSERT_MESSAGE("E3 has no left border",
6300 !static_cast<const SvxBoxItem
*>(pItem
)->GetLeft());
6301 CPPUNIT_ASSERT_MESSAGE("E3 has no right border",
6302 !static_cast<const SvxBoxItem
*>(pItem
)->GetRight());
6303 pItem
= m_pDoc
->GetAttr(ScAddress(5, 2, destSheet
), ATTR_BORDER
);
6304 CPPUNIT_ASSERT_MESSAGE("F3 has a border", pItem
);
6305 CPPUNIT_ASSERT_MESSAGE("F3 has top border", static_cast<const SvxBoxItem
*>(pItem
)->GetTop());
6306 CPPUNIT_ASSERT_MESSAGE("F3 has bottom border",
6307 static_cast<const SvxBoxItem
*>(pItem
)->GetBottom());
6308 CPPUNIT_ASSERT_MESSAGE("F3 has no left border",
6309 !static_cast<const SvxBoxItem
*>(pItem
)->GetLeft());
6310 CPPUNIT_ASSERT_MESSAGE("F3 has no right border",
6311 !static_cast<const SvxBoxItem
*>(pItem
)->GetRight());
6312 pItem
= m_pDoc
->GetAttr(ScAddress(6, 2, destSheet
), ATTR_BORDER
);
6313 CPPUNIT_ASSERT_MESSAGE("G3 has top border", !static_cast<const SvxBoxItem
*>(pItem
)->GetTop());
6314 CPPUNIT_ASSERT_MESSAGE("G3 has bottom border",
6315 !static_cast<const SvxBoxItem
*>(pItem
)->GetBottom());
6316 CPPUNIT_ASSERT_MESSAGE("G3 has no left border",
6317 !static_cast<const SvxBoxItem
*>(pItem
)->GetLeft());
6318 CPPUNIT_ASSERT_MESSAGE("G3 has no right border",
6319 !static_cast<const SvxBoxItem
*>(pItem
)->GetRight());
6320 pItem
= m_pDoc
->GetAttr(ScAddress(7, 2, destSheet
), ATTR_BORDER
);
6321 CPPUNIT_ASSERT_MESSAGE("H3 has a border", pItem
);
6322 CPPUNIT_ASSERT_MESSAGE("H3 has no top border",
6323 !static_cast<const SvxBoxItem
*>(pItem
)->GetTop());
6324 CPPUNIT_ASSERT_MESSAGE("H3 has no bottom border",
6325 !static_cast<const SvxBoxItem
*>(pItem
)->GetBottom());
6326 CPPUNIT_ASSERT_MESSAGE("H3 has no left border",
6327 !static_cast<const SvxBoxItem
*>(pItem
)->GetLeft());
6328 CPPUNIT_ASSERT_MESSAGE("H3 has no right border",
6329 !static_cast<const SvxBoxItem
*>(pItem
)->GetRight());
6331 // check notes after transposed copy/paste
6332 // check presence of notes
6333 CPPUNIT_ASSERT_MESSAGE("C1: no note", !m_pDoc
->HasNote(2, 0, destSheet
));
6334 CPPUNIT_ASSERT_MESSAGE("D1: no note", !m_pDoc
->HasNote(3, 0, destSheet
));
6335 CPPUNIT_ASSERT_MESSAGE("E1: no note", !m_pDoc
->HasNote(4, 0, destSheet
));
6336 CPPUNIT_ASSERT_MESSAGE("F1: no note", !m_pDoc
->HasNote(5, 0, destSheet
));
6337 CPPUNIT_ASSERT_MESSAGE("G1: no note", !m_pDoc
->HasNote(6, 0, destSheet
));
6338 CPPUNIT_ASSERT_MESSAGE("H1: no note", !m_pDoc
->HasNote(7, 0, destSheet
));
6339 CPPUNIT_ASSERT_MESSAGE("C2: no note", !m_pDoc
->HasNote(2, 1, destSheet
));
6340 CPPUNIT_ASSERT_MESSAGE("D2: a note", m_pDoc
->HasNote(3, 1, destSheet
));
6341 CPPUNIT_ASSERT_MESSAGE("E2: a note", m_pDoc
->HasNote(4, 1, destSheet
));
6342 CPPUNIT_ASSERT_MESSAGE("F2: a note", m_pDoc
->HasNote(5, 1, destSheet
));
6343 CPPUNIT_ASSERT_MESSAGE("G2: no note", !m_pDoc
->HasNote(6, 1, destSheet
));
6344 CPPUNIT_ASSERT_MESSAGE("H2: no note", !m_pDoc
->HasNote(7, 1, destSheet
));
6345 CPPUNIT_ASSERT_MESSAGE("C3: no note", !m_pDoc
->HasNote(2, 2, destSheet
));
6346 CPPUNIT_ASSERT_MESSAGE("D3: a note", m_pDoc
->HasNote(3, 2, destSheet
));
6347 CPPUNIT_ASSERT_MESSAGE("E3: no note", !m_pDoc
->HasNote(4, 2, destSheet
));
6348 CPPUNIT_ASSERT_MESSAGE("F3: a note", m_pDoc
->HasNote(5, 2, destSheet
));
6349 CPPUNIT_ASSERT_MESSAGE("G3: no note", !m_pDoc
->HasNote(6, 2, destSheet
));
6350 CPPUNIT_ASSERT_MESSAGE("H3: no note", !m_pDoc
->HasNote(7, 2, destSheet
));
6351 CPPUNIT_ASSERT_MESSAGE("C4: no note", !m_pDoc
->HasNote(2, 3, destSheet
));
6352 CPPUNIT_ASSERT_MESSAGE("D4: no note", !m_pDoc
->HasNote(3, 3, destSheet
));
6353 CPPUNIT_ASSERT_MESSAGE("E4: a note", m_pDoc
->HasNote(4, 3, destSheet
));
6354 CPPUNIT_ASSERT_MESSAGE("F4: a note", m_pDoc
->HasNote(5, 3, destSheet
));
6355 CPPUNIT_ASSERT_MESSAGE("G4: a note", m_pDoc
->HasNote(6, 3, destSheet
));
6356 CPPUNIT_ASSERT_MESSAGE("H4: no note", !m_pDoc
->HasNote(7, 3, destSheet
));
6357 CPPUNIT_ASSERT_MESSAGE("C5: no note", !m_pDoc
->HasNote(2, 4, destSheet
));
6358 CPPUNIT_ASSERT_MESSAGE("D5: a note", m_pDoc
->HasNote(3, 4, destSheet
));
6359 CPPUNIT_ASSERT_MESSAGE("E5: a note", m_pDoc
->HasNote(4, 4, destSheet
));
6360 CPPUNIT_ASSERT_MESSAGE("F5: a note", m_pDoc
->HasNote(5, 4, destSheet
));
6361 CPPUNIT_ASSERT_MESSAGE("G5: no note", !m_pDoc
->HasNote(6, 4, destSheet
));
6362 CPPUNIT_ASSERT_MESSAGE("H5: no note", !m_pDoc
->HasNote(7, 4, destSheet
));
6363 CPPUNIT_ASSERT_MESSAGE("C6: no note", !m_pDoc
->HasNote(2, 5, destSheet
));
6364 CPPUNIT_ASSERT_MESSAGE("D6: no note", !m_pDoc
->HasNote(3, 5, destSheet
));
6365 CPPUNIT_ASSERT_MESSAGE("E6: no note", !m_pDoc
->HasNote(4, 5, destSheet
));
6366 CPPUNIT_ASSERT_EQUAL(!bSkipEmpty
, m_pDoc
->HasNote(5, 5, destSheet
));
6367 CPPUNIT_ASSERT_MESSAGE("G6: no note", !m_pDoc
->HasNote(6, 5, destSheet
));
6368 CPPUNIT_ASSERT_MESSAGE("H6: no note", !m_pDoc
->HasNote(7, 5, destSheet
));
6369 CPPUNIT_ASSERT_MESSAGE("C7: no note", !m_pDoc
->HasNote(2, 6, destSheet
));
6370 CPPUNIT_ASSERT_MESSAGE("D7: no note", !m_pDoc
->HasNote(3, 6, destSheet
));
6371 CPPUNIT_ASSERT_EQUAL(!bSkipEmpty
, m_pDoc
->HasNote(4, 6, destSheet
));
6372 CPPUNIT_ASSERT_MESSAGE("F7: no note", !m_pDoc
->HasNote(5, 6, destSheet
));
6373 CPPUNIT_ASSERT_MESSAGE("G7: no note", !m_pDoc
->HasNote(6, 6, destSheet
));
6374 CPPUNIT_ASSERT_MESSAGE("H7: no note", !m_pDoc
->HasNote(7, 6, destSheet
));
6375 CPPUNIT_ASSERT_MESSAGE("C8: no note", !m_pDoc
->HasNote(2, 7, destSheet
));
6376 CPPUNIT_ASSERT_MESSAGE("D8: no note", !m_pDoc
->HasNote(3, 7, destSheet
));
6377 CPPUNIT_ASSERT_MESSAGE("E8: no note", !m_pDoc
->HasNote(4, 7, destSheet
));
6378 CPPUNIT_ASSERT_MESSAGE("F8: no note", !m_pDoc
->HasNote(5, 7, destSheet
));
6379 CPPUNIT_ASSERT_MESSAGE("G8: no note", !m_pDoc
->HasNote(6, 7, destSheet
));
6380 CPPUNIT_ASSERT_MESSAGE("H8: no note", !m_pDoc
->HasNote(7, 7, destSheet
));
6382 // check values of notes
6383 CPPUNIT_ASSERT_EQUAL_MESSAGE("Cell D2", u
"Note A1"_ustr
, getNote(3, 1, destSheet
));
6384 CPPUNIT_ASSERT_EQUAL_MESSAGE("Cell E2", u
"Note A2"_ustr
, getNote(4, 1, destSheet
));
6385 CPPUNIT_ASSERT_EQUAL_MESSAGE("Cell F2", u
"Note A3"_ustr
, getNote(5, 1, destSheet
));
6387 CPPUNIT_ASSERT_EQUAL_MESSAGE("Cell D3", u
"Note B1"_ustr
, getNote(3, 2, destSheet
));
6389 CPPUNIT_ASSERT_EQUAL_MESSAGE("Cell F3", u
"Note B3"_ustr
, getNote(5, 2, destSheet
));
6391 CPPUNIT_ASSERT_EQUAL_MESSAGE("Cell E4", u
"Note C2"_ustr
, getNote(4, 3, destSheet
));
6392 CPPUNIT_ASSERT_EQUAL_MESSAGE("Cell F4", u
"Note C3"_ustr
, getNote(5, 3, destSheet
));
6393 CPPUNIT_ASSERT_EQUAL_MESSAGE("Cell D5", u
"Note D1"_ustr
, getNote(3, 4, destSheet
));
6394 CPPUNIT_ASSERT_EQUAL_MESSAGE("Cell E5", u
"Note D2"_ustr
, getNote(4, 4, destSheet
));
6395 CPPUNIT_ASSERT_EQUAL_MESSAGE("Cell F5", u
"Note D3"_ustr
, getNote(5, 4, destSheet
));
6397 CPPUNIT_ASSERT_EQUAL(u
"Note E2"_ustr
, getNote(5, 5, destSheet
));
6399 CPPUNIT_ASSERT_EQUAL_MESSAGE("Cell E7", u
"Note F2"_ustr
, getNote(4, 6, destSheet
));
6400 CPPUNIT_ASSERT_EQUAL(u
"Note C5"_ustr
, getNote(6, 3, destSheet
));
6402 // check row 16 on src sheet, refs to copied/cut range
6403 CPPUNIT_ASSERT_EQUAL(u
"=C5"_ustr
, m_pDoc
->GetFormula(1, 16, srcSheet
));
6404 CPPUNIT_ASSERT_EQUAL(u
"=$C$5"_ustr
, m_pDoc
->GetFormula(2, 16, srcSheet
));
6405 CPPUNIT_ASSERT_EQUAL(u
"=$C5"_ustr
, m_pDoc
->GetFormula(3, 16, srcSheet
));
6406 CPPUNIT_ASSERT_EQUAL(u
"=C$5"_ustr
, m_pDoc
->GetFormula(4, 16, srcSheet
));
6407 CPPUNIT_ASSERT_EQUAL(u
"=SUM(C5:C5)"_ustr
, m_pDoc
->GetFormula(5, 16, srcSheet
));
6408 CPPUNIT_ASSERT_EQUAL(u
"=SUM($C$5:$C$5)"_ustr
, m_pDoc
->GetFormula(6, 16, srcSheet
));
6409 CPPUNIT_ASSERT_EQUAL(u
"=SUM($C5:$C5)"_ustr
, m_pDoc
->GetFormula(7, 16, srcSheet
));
6410 CPPUNIT_ASSERT_EQUAL(u
"=SUM(C$5:C$5)"_ustr
, m_pDoc
->GetFormula(8, 16, srcSheet
));
6411 CPPUNIT_ASSERT_EQUAL(u
"=SUM($B$3:$B$6)"_ustr
, m_pDoc
->GetFormula(9, 16, srcSheet
));
6412 CPPUNIT_ASSERT_EQUAL(u
"=SUM($B$3:$B$10)"_ustr
, m_pDoc
->GetFormula(10, 16, srcSheet
));
6414 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(1, 16, srcSheet
));
6415 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(2, 16, srcSheet
));
6416 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(3, 16, srcSheet
));
6417 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(4, 16, srcSheet
));
6418 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(5, 16, srcSheet
));
6419 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(6, 16, srcSheet
));
6420 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(7, 16, srcSheet
));
6421 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(8, 16, srcSheet
));
6422 CPPUNIT_ASSERT_EQUAL(10.0, m_pDoc
->GetValue(9, 16, srcSheet
));
6423 CPPUNIT_ASSERT_EQUAL(-17.0, m_pDoc
->GetValue(10, 16, srcSheet
));
6425 CPPUNIT_ASSERT_EQUAL(u
"=Range_C5"_ustr
, m_pDoc
->GetFormula(1, 17, srcSheet
));
6426 CPPUNIT_ASSERT_EQUAL(u
"=Range_aCa5"_ustr
, m_pDoc
->GetFormula(2, 17, srcSheet
));
6427 CPPUNIT_ASSERT_EQUAL(u
"=Range_aC5"_ustr
, m_pDoc
->GetFormula(3, 17, srcSheet
));
6428 CPPUNIT_ASSERT_EQUAL(u
"=Range_Ca5"_ustr
, m_pDoc
->GetFormula(4, 17, srcSheet
));
6429 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_C5_C5)"_ustr
, m_pDoc
->GetFormula(5, 17, srcSheet
));
6430 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_aCa5_aCa5)"_ustr
, m_pDoc
->GetFormula(6, 17, srcSheet
));
6431 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_aC5_aC5)"_ustr
, m_pDoc
->GetFormula(7, 17, srcSheet
));
6432 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_Ca5_Ca5)"_ustr
, m_pDoc
->GetFormula(8, 17, srcSheet
));
6433 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_aCa5_aCa8)"_ustr
, m_pDoc
->GetFormula(9, 17, srcSheet
));
6434 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_aCa5_aCa10)"_ustr
, m_pDoc
->GetFormula(10, 17, srcSheet
));
6436 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(1, 17, srcSheet
));
6437 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(2, 17, srcSheet
));
6438 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(3, 17, srcSheet
));
6439 CPPUNIT_ASSERT_EQUAL(5.0, m_pDoc
->GetValue(4, 17, srcSheet
));
6440 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(5, 17, srcSheet
));
6441 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(6, 17, srcSheet
));
6442 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(7, 17, srcSheet
));
6443 CPPUNIT_ASSERT_EQUAL(123.0, m_pDoc
->GetValue(8, 17, srcSheet
));
6444 CPPUNIT_ASSERT_EQUAL(10.0, m_pDoc
->GetValue(9, 17, srcSheet
));
6445 CPPUNIT_ASSERT_EQUAL(-17.0, m_pDoc
->GetValue(10, 17, srcSheet
));
6447 // Existing references to the destination range must not change
6448 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.D1"_ustr
, m_pDoc
->GetFormula(3, 101, srcSheet
));
6449 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.D2"_ustr
, m_pDoc
->GetFormula(3, 102, srcSheet
));
6450 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.D3"_ustr
, m_pDoc
->GetFormula(3, 103, srcSheet
));
6451 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.D4"_ustr
, m_pDoc
->GetFormula(3, 104, srcSheet
));
6452 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.D5"_ustr
, m_pDoc
->GetFormula(3, 105, srcSheet
));
6453 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.D6"_ustr
, m_pDoc
->GetFormula(3, 106, srcSheet
));
6454 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.D7"_ustr
, m_pDoc
->GetFormula(3, 107, srcSheet
));
6455 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.E1"_ustr
, m_pDoc
->GetFormula(4, 101, srcSheet
));
6456 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.E2"_ustr
, m_pDoc
->GetFormula(4, 102, srcSheet
));
6457 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.E3"_ustr
, m_pDoc
->GetFormula(4, 103, srcSheet
));
6458 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.E4"_ustr
, m_pDoc
->GetFormula(4, 104, srcSheet
));
6459 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.E5"_ustr
, m_pDoc
->GetFormula(4, 105, srcSheet
));
6460 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.E6"_ustr
, m_pDoc
->GetFormula(4, 106, srcSheet
));
6461 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.E7"_ustr
, m_pDoc
->GetFormula(4, 107, srcSheet
));
6462 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.F1"_ustr
, m_pDoc
->GetFormula(5, 101, srcSheet
));
6463 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.F2"_ustr
, m_pDoc
->GetFormula(5, 102, srcSheet
));
6464 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.F3"_ustr
, m_pDoc
->GetFormula(5, 103, srcSheet
));
6465 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.F4"_ustr
, m_pDoc
->GetFormula(5, 104, srcSheet
));
6466 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.F5"_ustr
, m_pDoc
->GetFormula(5, 105, srcSheet
));
6467 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.F6"_ustr
, m_pDoc
->GetFormula(5, 106, srcSheet
));
6468 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.F7"_ustr
, m_pDoc
->GetFormula(5, 107, srcSheet
));
6469 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.G1"_ustr
, m_pDoc
->GetFormula(6, 101, srcSheet
));
6470 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.G2"_ustr
, m_pDoc
->GetFormula(6, 102, srcSheet
));
6471 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.G3"_ustr
, m_pDoc
->GetFormula(6, 103, srcSheet
));
6472 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.G4"_ustr
, m_pDoc
->GetFormula(6, 104, srcSheet
));
6473 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.G5"_ustr
, m_pDoc
->GetFormula(6, 105, srcSheet
));
6474 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.G6"_ustr
, m_pDoc
->GetFormula(6, 106, srcSheet
));
6475 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.G7"_ustr
, m_pDoc
->GetFormula(6, 107, srcSheet
));
6476 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.H1"_ustr
, m_pDoc
->GetFormula(7, 101, srcSheet
));
6477 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.H2"_ustr
, m_pDoc
->GetFormula(7, 102, srcSheet
));
6478 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.H3"_ustr
, m_pDoc
->GetFormula(7, 103, srcSheet
));
6479 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.H4"_ustr
, m_pDoc
->GetFormula(7, 104, srcSheet
));
6480 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.H5"_ustr
, m_pDoc
->GetFormula(7, 105, srcSheet
));
6481 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.H6"_ustr
, m_pDoc
->GetFormula(7, 106, srcSheet
));
6482 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.H7"_ustr
, m_pDoc
->GetFormula(7, 107, srcSheet
));
6483 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.I1"_ustr
, m_pDoc
->GetFormula(8, 101, srcSheet
));
6484 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.I2"_ustr
, m_pDoc
->GetFormula(8, 102, srcSheet
));
6485 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.I3"_ustr
, m_pDoc
->GetFormula(8, 103, srcSheet
));
6486 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.I4"_ustr
, m_pDoc
->GetFormula(8, 104, srcSheet
));
6487 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.I5"_ustr
, m_pDoc
->GetFormula(8, 105, srcSheet
));
6488 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.I6"_ustr
, m_pDoc
->GetFormula(8, 106, srcSheet
));
6489 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.I7"_ustr
, m_pDoc
->GetFormula(8, 107, srcSheet
));
6490 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.J1"_ustr
, m_pDoc
->GetFormula(9, 101, srcSheet
));
6491 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.J2"_ustr
, m_pDoc
->GetFormula(9, 102, srcSheet
));
6492 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.J3"_ustr
, m_pDoc
->GetFormula(9, 103, srcSheet
));
6493 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.J4"_ustr
, m_pDoc
->GetFormula(9, 104, srcSheet
));
6494 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.J5"_ustr
, m_pDoc
->GetFormula(9, 105, srcSheet
));
6495 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.J6"_ustr
, m_pDoc
->GetFormula(9, 106, srcSheet
));
6496 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.J7"_ustr
, m_pDoc
->GetFormula(9, 107, srcSheet
));
6498 m_pDoc
->DeleteTab(destSheet
);
6499 m_pDoc
->DeleteTab(srcSheet
);
6502 void TestCopyPaste::checkCopyPasteSpecialMultiRangeRowFilteredTranspose(bool bSkipEmpty
)
6504 const SCTAB srcSheet
= 0;
6505 const SCTAB destSheet
= 1;
6510 2 | 1 B*| 3 B*| 6 | -11 |
6511 3 | =D2+10 *| =F5+30 b*| q | -12 |
6512 4 | a | c *| r | -13 |
6513 5 | R1 *| 5 *| s | -14 |
6514 6 | =D2+F2+60 | B*| t | -15 |
6515 7 | =SUMIF(D2:G2;"<4") | | u | -16 |
6517 * means note attached
6522 //check cell content after transposed copy/paste of filtered data
6523 // Note: column F is a repetition of srcSheet.Column A
6524 // Col C and G are checked to be empty
6525 const EditTextObject
* pEditObj
;
6527 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(2, 0, destSheet
));
6528 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(3, 0, destSheet
));
6529 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(4, 0, destSheet
));
6530 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(5, 0, destSheet
));
6531 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(6, 0, destSheet
));
6532 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(7, 0, destSheet
));
6534 CPPUNIT_ASSERT_EQUAL_MESSAGE("transposed cell C2", 1000.0, m_pDoc
->GetValue(2, 1, destSheet
));
6535 CPPUNIT_ASSERT_EQUAL_MESSAGE("transposed cell D2", 1.0, m_pDoc
->GetValue(3, 1, destSheet
));
6536 CPPUNIT_ASSERT_EQUAL_MESSAGE("transposed cell E2", 3.0, m_pDoc
->GetValue(4, 1, destSheet
));
6537 CPPUNIT_ASSERT_EQUAL_MESSAGE("transposed cell F2", 6.0, m_pDoc
->GetValue(5, 1, destSheet
));
6538 CPPUNIT_ASSERT_EQUAL(-11.0, m_pDoc
->GetValue(6, 1, destSheet
));
6539 CPPUNIT_ASSERT_EQUAL_MESSAGE("transposed cell H2", 1000.0, m_pDoc
->GetValue(7, 1, destSheet
));
6541 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(2, 2, destSheet
));
6542 CPPUNIT_ASSERT_EQUAL(u
"1000"_ustr
, m_pDoc
->GetString(2, 2, destSheet
));
6543 CPPUNIT_ASSERT_EQUAL_MESSAGE("transposed D3", 11.0, m_pDoc
->GetValue(3, 2, destSheet
));
6544 CPPUNIT_ASSERT_EQUAL_MESSAGE("transposed D3", u
"=D2+10"_ustr
,
6545 m_pDoc
->GetFormula(3, 2, destSheet
));
6546 CPPUNIT_ASSERT_EQUAL_MESSAGE("transposed E3", 35.0, m_pDoc
->GetValue(4, 2, destSheet
));
6547 CPPUNIT_ASSERT_EQUAL_MESSAGE("transposed E3", u
"=E5+30"_ustr
,
6548 m_pDoc
->GetFormula(4, 2, destSheet
));
6549 CPPUNIT_ASSERT_EQUAL_MESSAGE("Cell F4", u
"q"_ustr
, m_pDoc
->GetString(5, 2, destSheet
));
6550 CPPUNIT_ASSERT_EQUAL(-12.0, m_pDoc
->GetValue(6, 2, destSheet
));
6551 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(7, 2, destSheet
));
6552 CPPUNIT_ASSERT_EQUAL(u
"1000"_ustr
, m_pDoc
->GetString(7, 2, destSheet
));
6554 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(2, 3, destSheet
));
6555 CPPUNIT_ASSERT_EQUAL(u
"1000"_ustr
, m_pDoc
->GetString(2, 3, destSheet
));
6556 CPPUNIT_ASSERT_EQUAL_MESSAGE("Cell D4", u
"a"_ustr
, m_pDoc
->GetString(3, 3, destSheet
));
6557 CPPUNIT_ASSERT_EQUAL_MESSAGE("Cell E4", u
"c"_ustr
, m_pDoc
->GetString(4, 3, destSheet
));
6558 CPPUNIT_ASSERT_EQUAL_MESSAGE("Cell F4", u
"r"_ustr
, m_pDoc
->GetString(5, 3, destSheet
));
6559 CPPUNIT_ASSERT_EQUAL(-13.0, m_pDoc
->GetValue(6, 3, destSheet
));
6560 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(7, 3, destSheet
));
6561 CPPUNIT_ASSERT_EQUAL(u
"1000"_ustr
, m_pDoc
->GetString(7, 3, destSheet
));
6563 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(2, 4, destSheet
));
6564 pEditObj
= m_pDoc
->GetEditText(ScAddress(2, 4, destSheet
));
6565 CPPUNIT_ASSERT_MESSAGE("There should be no edit cell in C5.", pEditObj
== nullptr);
6566 pEditObj
= m_pDoc
->GetEditText(ScAddress(3, 4, destSheet
));
6567 CPPUNIT_ASSERT_MESSAGE("There should be an edit cell in D5.", pEditObj
);
6568 CPPUNIT_ASSERT_EQUAL_MESSAGE("Edit cell value wrong in D5 ", u
"R1"_ustr
, pEditObj
->GetText(0));
6569 CPPUNIT_ASSERT_EQUAL_MESSAGE("transposed cell E5", 5.0, m_pDoc
->GetValue(4, 4, destSheet
));
6570 CPPUNIT_ASSERT_EQUAL_MESSAGE("Cell F5", u
"s"_ustr
, m_pDoc
->GetString(5, 4, destSheet
));
6571 CPPUNIT_ASSERT_EQUAL(-14.0, m_pDoc
->GetValue(6, 4, destSheet
));
6572 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(7, 4, destSheet
));
6573 pEditObj
= m_pDoc
->GetEditText(ScAddress(7, 4, destSheet
));
6574 CPPUNIT_ASSERT_MESSAGE("There should be no edit cell in H5.", pEditObj
== nullptr);
6576 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(2, 5, destSheet
));
6577 CPPUNIT_ASSERT_EQUAL(u
"1000"_ustr
, m_pDoc
->GetString(2, 5, destSheet
));
6578 CPPUNIT_ASSERT_EQUAL_MESSAGE("transposed D6", u
"=D2+F2+60"_ustr
,
6579 m_pDoc
->GetFormula(3, 5, destSheet
));
6580 CPPUNIT_ASSERT_EQUAL_MESSAGE("transposed D6", 67.0, m_pDoc
->GetValue(3, 5, destSheet
));
6583 CPPUNIT_ASSERT_EQUAL_MESSAGE("Cell E6", OUString(), m_pDoc
->GetString(4, 5, destSheet
));
6586 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(4, 5, destSheet
));
6587 CPPUNIT_ASSERT_EQUAL_MESSAGE("Cell F6", u
"t"_ustr
, m_pDoc
->GetString(5, 5, destSheet
));
6588 CPPUNIT_ASSERT_EQUAL(-15.0, m_pDoc
->GetValue(6, 5, destSheet
));
6589 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(7, 5, destSheet
));
6590 CPPUNIT_ASSERT_EQUAL(u
"1000"_ustr
, m_pDoc
->GetString(7, 5, destSheet
));
6592 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(2, 6, destSheet
));
6593 CPPUNIT_ASSERT_EQUAL(u
"1000"_ustr
, m_pDoc
->GetString(2, 6, destSheet
));
6594 CPPUNIT_ASSERT_EQUAL_MESSAGE("transposed D7", u
"=SUMIF(D2:G2;\"<4\")"_ustr
,
6595 m_pDoc
->GetFormula(3, 6, destSheet
));
6596 CPPUNIT_ASSERT_EQUAL_MESSAGE("transposed D7", -7.0, m_pDoc
->GetValue(3, 6, destSheet
));
6598 CPPUNIT_ASSERT_EQUAL_MESSAGE("Cell E7", OUString(), m_pDoc
->GetString(4, 6, destSheet
));
6600 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(4, 6, destSheet
));
6601 CPPUNIT_ASSERT_EQUAL_MESSAGE("Cell F7", u
"u"_ustr
, m_pDoc
->GetString(5, 6, destSheet
));
6602 CPPUNIT_ASSERT_EQUAL(-16.0, m_pDoc
->GetValue(6, 6, destSheet
));
6603 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(7, 6, destSheet
));
6604 CPPUNIT_ASSERT_EQUAL(u
"1000"_ustr
, m_pDoc
->GetString(7, 6, destSheet
));
6606 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(2, 7, destSheet
));
6607 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(3, 7, destSheet
));
6608 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(4, 7, destSheet
));
6609 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(5, 7, destSheet
));
6610 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(6, 7, destSheet
));
6611 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(7, 7, destSheet
));
6614 const SfxPoolItem
* pItem
= nullptr;
6615 m_pDoc
->GetPattern(ScAddress(3, 1, destSheet
))->GetItemSet().HasItem(ATTR_BACKGROUND
, &pItem
);
6616 CPPUNIT_ASSERT_MESSAGE("D2 has a pattern", pItem
);
6617 CPPUNIT_ASSERT_EQUAL_MESSAGE("D2 has blue background", COL_BLUE
,
6618 static_cast<const SvxBrushItem
*>(pItem
)->GetColor());
6619 m_pDoc
->GetPattern(ScAddress(4, 1, destSheet
))->GetItemSet().HasItem(ATTR_BACKGROUND
, &pItem
);
6620 CPPUNIT_ASSERT_MESSAGE("E2 has a pattern", pItem
);
6621 CPPUNIT_ASSERT_EQUAL_MESSAGE("E2 has a pattern", COL_BLUE
,
6622 static_cast<const SvxBrushItem
*>(pItem
)->GetColor());
6623 m_pDoc
->GetPattern(ScAddress(5, 1, destSheet
))->GetItemSet().HasItem(ATTR_BACKGROUND
, &pItem
);
6624 CPPUNIT_ASSERT_MESSAGE("F2 has no pattern", !pItem
);
6625 m_pDoc
->GetPattern(ScAddress(6, 1, destSheet
))->GetItemSet().HasItem(ATTR_BACKGROUND
, &pItem
);
6626 CPPUNIT_ASSERT_MESSAGE("G2 has no pattern", !pItem
);
6627 m_pDoc
->GetPattern(ScAddress(4, 5, destSheet
))->GetItemSet().HasItem(ATTR_BACKGROUND
, &pItem
);
6628 CPPUNIT_ASSERT_EQUAL(bSkipEmpty
, pItem
== nullptr);
6630 CPPUNIT_ASSERT_EQUAL(COL_GREEN
, static_cast<const SvxBrushItem
*>(pItem
)->GetColor());
6632 m_pDoc
->GetPattern(ScAddress(5, 2, destSheet
))->GetItemSet().HasItem(ATTR_BACKGROUND
, &pItem
);
6633 CPPUNIT_ASSERT(!pItem
);
6634 m_pDoc
->GetPattern(ScAddress(5, 3, destSheet
))->GetItemSet().HasItem(ATTR_BACKGROUND
, &pItem
);
6635 CPPUNIT_ASSERT(pItem
);
6636 CPPUNIT_ASSERT_EQUAL(COL_RED
, static_cast<const SvxBrushItem
*>(pItem
)->GetColor());
6637 m_pDoc
->GetPattern(ScAddress(5, 4, destSheet
))->GetItemSet().HasItem(ATTR_BACKGROUND
, &pItem
);
6638 CPPUNIT_ASSERT(pItem
);
6639 CPPUNIT_ASSERT_EQUAL(COL_RED
, static_cast<const SvxBrushItem
*>(pItem
)->GetColor());
6640 m_pDoc
->GetPattern(ScAddress(5, 5, destSheet
))->GetItemSet().HasItem(ATTR_BACKGROUND
, &pItem
);
6641 CPPUNIT_ASSERT(!pItem
);
6642 m_pDoc
->GetPattern(ScAddress(5, 6, destSheet
))->GetItemSet().HasItem(ATTR_BACKGROUND
, &pItem
);
6643 CPPUNIT_ASSERT(!pItem
);
6645 // check border, left and right borders were transformed to top and bottom borders
6646 pItem
= m_pDoc
->GetAttr(ScAddress(3, 2, destSheet
), ATTR_BORDER
);
6647 CPPUNIT_ASSERT_MESSAGE("D3 has a border", pItem
);
6648 CPPUNIT_ASSERT_MESSAGE("D3 has no top border",
6649 !static_cast<const SvxBoxItem
*>(pItem
)->GetTop());
6650 CPPUNIT_ASSERT_MESSAGE("D3 has no bottom border",
6651 !static_cast<const SvxBoxItem
*>(pItem
)->GetBottom());
6652 CPPUNIT_ASSERT_MESSAGE("D3 has no left border",
6653 !static_cast<const SvxBoxItem
*>(pItem
)->GetLeft());
6654 CPPUNIT_ASSERT_MESSAGE("D3 has no right border",
6655 !static_cast<const SvxBoxItem
*>(pItem
)->GetRight());
6656 m_pDoc
->GetPattern(ScAddress(4, 2, destSheet
))->GetItemSet().HasItem(ATTR_BORDER
, &pItem
);
6657 CPPUNIT_ASSERT_MESSAGE("E3 has a border", pItem
);
6658 CPPUNIT_ASSERT_MESSAGE("E3 has top border", static_cast<const SvxBoxItem
*>(pItem
)->GetTop());
6659 pItem
= m_pDoc
->GetAttr(ScAddress(4, 2, destSheet
), ATTR_BORDER
);
6660 CPPUNIT_ASSERT_MESSAGE("E3 has a border", pItem
);
6661 CPPUNIT_ASSERT_MESSAGE("E3 has top border", static_cast<const SvxBoxItem
*>(pItem
)->GetTop());
6662 CPPUNIT_ASSERT_MESSAGE("E3 has bottom border",
6663 static_cast<const SvxBoxItem
*>(pItem
)->GetBottom());
6664 CPPUNIT_ASSERT_MESSAGE("E3 has no left border",
6665 !static_cast<const SvxBoxItem
*>(pItem
)->GetLeft());
6666 CPPUNIT_ASSERT_MESSAGE("E3 has no right border",
6667 !static_cast<const SvxBoxItem
*>(pItem
)->GetRight());
6668 pItem
= m_pDoc
->GetAttr(ScAddress(5, 2, destSheet
), ATTR_BORDER
);
6669 CPPUNIT_ASSERT_MESSAGE("F3 has top border", !static_cast<const SvxBoxItem
*>(pItem
)->GetTop());
6670 CPPUNIT_ASSERT_MESSAGE("F3 has bottom border",
6671 !static_cast<const SvxBoxItem
*>(pItem
)->GetBottom());
6672 CPPUNIT_ASSERT_MESSAGE("F3 has no left border",
6673 !static_cast<const SvxBoxItem
*>(pItem
)->GetLeft());
6674 CPPUNIT_ASSERT_MESSAGE("F3 has no right border",
6675 !static_cast<const SvxBoxItem
*>(pItem
)->GetRight());
6676 pItem
= m_pDoc
->GetAttr(ScAddress(6, 2, destSheet
), ATTR_BORDER
);
6677 CPPUNIT_ASSERT_MESSAGE("G3 has a border", pItem
);
6678 CPPUNIT_ASSERT_MESSAGE("G3 has no top border",
6679 !static_cast<const SvxBoxItem
*>(pItem
)->GetTop());
6680 CPPUNIT_ASSERT_MESSAGE("G3 has no bottom border",
6681 !static_cast<const SvxBoxItem
*>(pItem
)->GetBottom());
6682 CPPUNIT_ASSERT_MESSAGE("G3 has no left border",
6683 !static_cast<const SvxBoxItem
*>(pItem
)->GetLeft());
6684 CPPUNIT_ASSERT_MESSAGE("G3 has no right border",
6685 !static_cast<const SvxBoxItem
*>(pItem
)->GetRight());
6686 pItem
= m_pDoc
->GetAttr(ScAddress(5, 3, destSheet
), ATTR_BORDER
);
6687 CPPUNIT_ASSERT(pItem
);
6688 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetTop());
6689 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetBottom());
6690 CPPUNIT_ASSERT(static_cast<const SvxBoxItem
*>(pItem
)->GetLeft());
6691 CPPUNIT_ASSERT(static_cast<const SvxBoxItem
*>(pItem
)->GetRight());
6692 pItem
= m_pDoc
->GetAttr(ScAddress(5, 4, destSheet
), ATTR_BORDER
);
6693 CPPUNIT_ASSERT(pItem
);
6694 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetTop());
6695 CPPUNIT_ASSERT(!static_cast<const SvxBoxItem
*>(pItem
)->GetBottom());
6696 CPPUNIT_ASSERT(static_cast<const SvxBoxItem
*>(pItem
)->GetLeft());
6697 CPPUNIT_ASSERT(static_cast<const SvxBoxItem
*>(pItem
)->GetRight());
6699 // check notes after transposed copy/paste
6700 // check presence of notes
6701 CPPUNIT_ASSERT_MESSAGE("C1: no note", !m_pDoc
->HasNote(2, 0, destSheet
));
6702 CPPUNIT_ASSERT_MESSAGE("D1: no note", !m_pDoc
->HasNote(3, 0, destSheet
));
6703 CPPUNIT_ASSERT_MESSAGE("E1: no note", !m_pDoc
->HasNote(4, 0, destSheet
));
6704 CPPUNIT_ASSERT_MESSAGE("F1: no note", !m_pDoc
->HasNote(5, 0, destSheet
));
6705 CPPUNIT_ASSERT_MESSAGE("G1: no note", !m_pDoc
->HasNote(6, 0, destSheet
));
6706 CPPUNIT_ASSERT_MESSAGE("C2: no note", !m_pDoc
->HasNote(2, 1, destSheet
));
6707 CPPUNIT_ASSERT_MESSAGE("D2: a note", m_pDoc
->HasNote(3, 1, destSheet
));
6708 CPPUNIT_ASSERT_MESSAGE("E2: a note", m_pDoc
->HasNote(4, 1, destSheet
));
6709 CPPUNIT_ASSERT_MESSAGE("F2: no note", !m_pDoc
->HasNote(5, 1, destSheet
));
6710 CPPUNIT_ASSERT_MESSAGE("G2: no note", !m_pDoc
->HasNote(6, 1, destSheet
));
6711 CPPUNIT_ASSERT_MESSAGE("C3: no note", !m_pDoc
->HasNote(2, 2, destSheet
));
6712 CPPUNIT_ASSERT_MESSAGE("D3: a note", m_pDoc
->HasNote(3, 2, destSheet
));
6713 CPPUNIT_ASSERT_MESSAGE("E3: a note", m_pDoc
->HasNote(4, 2, destSheet
));
6714 CPPUNIT_ASSERT_MESSAGE("F3: no note", !m_pDoc
->HasNote(5, 2, destSheet
));
6715 CPPUNIT_ASSERT_MESSAGE("G3: no note", !m_pDoc
->HasNote(6, 2, destSheet
));
6716 CPPUNIT_ASSERT_MESSAGE("C4: no note", !m_pDoc
->HasNote(2, 3, destSheet
));
6717 CPPUNIT_ASSERT_MESSAGE("D4: no note", !m_pDoc
->HasNote(3, 3, destSheet
));
6718 CPPUNIT_ASSERT_MESSAGE("E4: a note", m_pDoc
->HasNote(4, 3, destSheet
));
6719 CPPUNIT_ASSERT_MESSAGE("F4: a note", m_pDoc
->HasNote(5, 3, destSheet
));
6720 CPPUNIT_ASSERT_MESSAGE("G4: no note", !m_pDoc
->HasNote(6, 3, destSheet
));
6721 CPPUNIT_ASSERT_MESSAGE("C5: no note", !m_pDoc
->HasNote(2, 4, destSheet
));
6722 CPPUNIT_ASSERT_MESSAGE("D5: a note", m_pDoc
->HasNote(3, 4, destSheet
));
6723 CPPUNIT_ASSERT_MESSAGE("E5: a note", m_pDoc
->HasNote(4, 4, destSheet
));
6724 CPPUNIT_ASSERT_MESSAGE("F5: no note", !m_pDoc
->HasNote(5, 4, destSheet
));
6725 CPPUNIT_ASSERT_MESSAGE("G5: no note", !m_pDoc
->HasNote(6, 4, destSheet
));
6726 CPPUNIT_ASSERT_MESSAGE("C6: no note", !m_pDoc
->HasNote(2, 5, destSheet
));
6727 CPPUNIT_ASSERT_MESSAGE("D6: no note", !m_pDoc
->HasNote(3, 5, destSheet
));
6728 CPPUNIT_ASSERT_EQUAL(!bSkipEmpty
, m_pDoc
->HasNote(4, 5, destSheet
));
6729 CPPUNIT_ASSERT_MESSAGE("F6: no note", !m_pDoc
->HasNote(5, 5, destSheet
));
6730 CPPUNIT_ASSERT_MESSAGE("G6: no note", !m_pDoc
->HasNote(6, 5, destSheet
));
6731 CPPUNIT_ASSERT_MESSAGE("C7: no note", !m_pDoc
->HasNote(2, 6, destSheet
));
6732 CPPUNIT_ASSERT_MESSAGE("D7: no note", !m_pDoc
->HasNote(3, 6, destSheet
));
6733 CPPUNIT_ASSERT_MESSAGE("E7: no note", !m_pDoc
->HasNote(4, 6, destSheet
));
6734 CPPUNIT_ASSERT_MESSAGE("F7: no note", !m_pDoc
->HasNote(5, 6, destSheet
));
6735 CPPUNIT_ASSERT_MESSAGE("G7: no note", !m_pDoc
->HasNote(6, 6, destSheet
));
6736 CPPUNIT_ASSERT_MESSAGE("C8: no note", !m_pDoc
->HasNote(2, 7, destSheet
));
6737 CPPUNIT_ASSERT_MESSAGE("D8: no note", !m_pDoc
->HasNote(3, 7, destSheet
));
6738 CPPUNIT_ASSERT_MESSAGE("E8: no note", !m_pDoc
->HasNote(4, 7, destSheet
));
6739 CPPUNIT_ASSERT_MESSAGE("F8: no note", !m_pDoc
->HasNote(5, 7, destSheet
));
6740 CPPUNIT_ASSERT_MESSAGE("G8: no note", !m_pDoc
->HasNote(6, 7, destSheet
));
6742 // check values of notes
6743 CPPUNIT_ASSERT_EQUAL_MESSAGE("Cell D2", u
"Note A1"_ustr
, getNote(3, 1, destSheet
));
6744 CPPUNIT_ASSERT_EQUAL_MESSAGE("Cell E2", u
"Note A3"_ustr
, getNote(4, 1, destSheet
));
6745 CPPUNIT_ASSERT_EQUAL_MESSAGE("Cell D3", u
"Note B1"_ustr
, getNote(3, 2, destSheet
));
6746 CPPUNIT_ASSERT_EQUAL_MESSAGE("Cell E3", u
"Note B3"_ustr
, getNote(4, 2, destSheet
));
6747 CPPUNIT_ASSERT_EQUAL_MESSAGE("Cell E4", u
"Note C3"_ustr
, getNote(4, 3, destSheet
));
6748 CPPUNIT_ASSERT_EQUAL_MESSAGE("Cell D5", u
"Note D1"_ustr
, getNote(3, 4, destSheet
));
6749 CPPUNIT_ASSERT_EQUAL_MESSAGE("Cell E5", u
"Note D3"_ustr
, getNote(4, 4, destSheet
));
6751 CPPUNIT_ASSERT_EQUAL(u
"Note E2"_ustr
, getNote(4, 5, destSheet
));
6752 CPPUNIT_ASSERT_EQUAL(u
"Note C5"_ustr
, getNote(5, 3, destSheet
));
6754 // check row 16 on src sheet, refs to copied/cut range
6755 CPPUNIT_ASSERT_EQUAL(u
"=C5"_ustr
, m_pDoc
->GetFormula(1, 16, srcSheet
));
6756 CPPUNIT_ASSERT_EQUAL(u
"=$C$5"_ustr
, m_pDoc
->GetFormula(2, 16, srcSheet
));
6757 CPPUNIT_ASSERT_EQUAL(u
"=$C5"_ustr
, m_pDoc
->GetFormula(3, 16, srcSheet
));
6758 CPPUNIT_ASSERT_EQUAL(u
"=C$5"_ustr
, m_pDoc
->GetFormula(4, 16, srcSheet
));
6759 CPPUNIT_ASSERT_EQUAL(u
"=SUM(C5:C5)"_ustr
, m_pDoc
->GetFormula(5, 16, srcSheet
));
6760 CPPUNIT_ASSERT_EQUAL(u
"=SUM($C$5:$C$5)"_ustr
, m_pDoc
->GetFormula(6, 16, srcSheet
));
6761 CPPUNIT_ASSERT_EQUAL(u
"=SUM($C5:$C5)"_ustr
, m_pDoc
->GetFormula(7, 16, srcSheet
));
6762 CPPUNIT_ASSERT_EQUAL(u
"=SUM(C$5:C$5)"_ustr
, m_pDoc
->GetFormula(8, 16, srcSheet
));
6763 CPPUNIT_ASSERT_EQUAL(u
"=SUM($B$3:$B$6)"_ustr
, m_pDoc
->GetFormula(9, 16, srcSheet
));
6764 CPPUNIT_ASSERT_EQUAL(u
"=SUM($B$3:$B$10)"_ustr
, m_pDoc
->GetFormula(10, 16, srcSheet
));
6766 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(1, 16, srcSheet
));
6767 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(2, 16, srcSheet
));
6768 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(3, 16, srcSheet
));
6769 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(4, 16, srcSheet
));
6770 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(5, 16, srcSheet
));
6771 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(6, 16, srcSheet
));
6772 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(7, 16, srcSheet
));
6773 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(8, 16, srcSheet
));
6774 CPPUNIT_ASSERT_EQUAL(10.0, m_pDoc
->GetValue(9, 16, srcSheet
));
6775 CPPUNIT_ASSERT_EQUAL(-17.0, m_pDoc
->GetValue(10, 16, srcSheet
));
6777 CPPUNIT_ASSERT_EQUAL(u
"=Range_C5"_ustr
, m_pDoc
->GetFormula(1, 17, srcSheet
));
6778 CPPUNIT_ASSERT_EQUAL(u
"=Range_aCa5"_ustr
, m_pDoc
->GetFormula(2, 17, srcSheet
));
6779 CPPUNIT_ASSERT_EQUAL(u
"=Range_aC5"_ustr
, m_pDoc
->GetFormula(3, 17, srcSheet
));
6780 CPPUNIT_ASSERT_EQUAL(u
"=Range_Ca5"_ustr
, m_pDoc
->GetFormula(4, 17, srcSheet
));
6781 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_C5_C5)"_ustr
, m_pDoc
->GetFormula(5, 17, srcSheet
));
6782 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_aCa5_aCa5)"_ustr
, m_pDoc
->GetFormula(6, 17, srcSheet
));
6783 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_aC5_aC5)"_ustr
, m_pDoc
->GetFormula(7, 17, srcSheet
));
6784 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_Ca5_Ca5)"_ustr
, m_pDoc
->GetFormula(8, 17, srcSheet
));
6785 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_aCa5_aCa8)"_ustr
, m_pDoc
->GetFormula(9, 17, srcSheet
));
6786 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_aCa5_aCa10)"_ustr
, m_pDoc
->GetFormula(10, 17, srcSheet
));
6788 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(1, 17, srcSheet
));
6789 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(2, 17, srcSheet
));
6790 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(3, 17, srcSheet
));
6791 CPPUNIT_ASSERT_EQUAL(5.0, m_pDoc
->GetValue(4, 17, srcSheet
));
6792 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(5, 17, srcSheet
));
6793 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(6, 17, srcSheet
));
6794 CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc
->GetValue(7, 17, srcSheet
));
6795 CPPUNIT_ASSERT_EQUAL(123.0, m_pDoc
->GetValue(8, 17, srcSheet
));
6796 CPPUNIT_ASSERT_EQUAL(10.0, m_pDoc
->GetValue(9, 17, srcSheet
));
6797 CPPUNIT_ASSERT_EQUAL(-17.0, m_pDoc
->GetValue(10, 17, srcSheet
));
6799 // Existing references to the destination range must not change
6800 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.D1"_ustr
, m_pDoc
->GetFormula(3, 101, srcSheet
));
6801 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.D2"_ustr
, m_pDoc
->GetFormula(3, 102, srcSheet
));
6802 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.D3"_ustr
, m_pDoc
->GetFormula(3, 103, srcSheet
));
6803 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.D4"_ustr
, m_pDoc
->GetFormula(3, 104, srcSheet
));
6804 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.D5"_ustr
, m_pDoc
->GetFormula(3, 105, srcSheet
));
6805 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.D6"_ustr
, m_pDoc
->GetFormula(3, 106, srcSheet
));
6806 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.D7"_ustr
, m_pDoc
->GetFormula(3, 107, srcSheet
));
6807 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.E1"_ustr
, m_pDoc
->GetFormula(4, 101, srcSheet
));
6808 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.E2"_ustr
, m_pDoc
->GetFormula(4, 102, srcSheet
));
6809 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.E3"_ustr
, m_pDoc
->GetFormula(4, 103, srcSheet
));
6810 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.E4"_ustr
, m_pDoc
->GetFormula(4, 104, srcSheet
));
6811 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.E5"_ustr
, m_pDoc
->GetFormula(4, 105, srcSheet
));
6812 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.E6"_ustr
, m_pDoc
->GetFormula(4, 106, srcSheet
));
6813 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.E7"_ustr
, m_pDoc
->GetFormula(4, 107, srcSheet
));
6814 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.F1"_ustr
, m_pDoc
->GetFormula(5, 101, srcSheet
));
6815 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.F2"_ustr
, m_pDoc
->GetFormula(5, 102, srcSheet
));
6816 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.F3"_ustr
, m_pDoc
->GetFormula(5, 103, srcSheet
));
6817 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.F4"_ustr
, m_pDoc
->GetFormula(5, 104, srcSheet
));
6818 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.F5"_ustr
, m_pDoc
->GetFormula(5, 105, srcSheet
));
6819 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.F6"_ustr
, m_pDoc
->GetFormula(5, 106, srcSheet
));
6820 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.F7"_ustr
, m_pDoc
->GetFormula(5, 107, srcSheet
));
6821 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.G1"_ustr
, m_pDoc
->GetFormula(6, 101, srcSheet
));
6822 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.G2"_ustr
, m_pDoc
->GetFormula(6, 102, srcSheet
));
6823 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.G3"_ustr
, m_pDoc
->GetFormula(6, 103, srcSheet
));
6824 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.G4"_ustr
, m_pDoc
->GetFormula(6, 104, srcSheet
));
6825 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.G5"_ustr
, m_pDoc
->GetFormula(6, 105, srcSheet
));
6826 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.G6"_ustr
, m_pDoc
->GetFormula(6, 106, srcSheet
));
6827 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.G7"_ustr
, m_pDoc
->GetFormula(6, 107, srcSheet
));
6828 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.H1"_ustr
, m_pDoc
->GetFormula(7, 101, srcSheet
));
6829 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.H2"_ustr
, m_pDoc
->GetFormula(7, 102, srcSheet
));
6830 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.H3"_ustr
, m_pDoc
->GetFormula(7, 103, srcSheet
));
6831 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.H4"_ustr
, m_pDoc
->GetFormula(7, 104, srcSheet
));
6832 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.H5"_ustr
, m_pDoc
->GetFormula(7, 105, srcSheet
));
6833 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.H6"_ustr
, m_pDoc
->GetFormula(7, 106, srcSheet
));
6834 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.H7"_ustr
, m_pDoc
->GetFormula(7, 107, srcSheet
));
6835 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.I1"_ustr
, m_pDoc
->GetFormula(8, 101, srcSheet
));
6836 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.I2"_ustr
, m_pDoc
->GetFormula(8, 102, srcSheet
));
6837 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.I3"_ustr
, m_pDoc
->GetFormula(8, 103, srcSheet
));
6838 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.I4"_ustr
, m_pDoc
->GetFormula(8, 104, srcSheet
));
6839 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.I5"_ustr
, m_pDoc
->GetFormula(8, 105, srcSheet
));
6840 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.I6"_ustr
, m_pDoc
->GetFormula(8, 106, srcSheet
));
6841 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.I7"_ustr
, m_pDoc
->GetFormula(8, 107, srcSheet
));
6842 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.J1"_ustr
, m_pDoc
->GetFormula(9, 101, srcSheet
));
6843 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.J2"_ustr
, m_pDoc
->GetFormula(9, 102, srcSheet
));
6844 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.J3"_ustr
, m_pDoc
->GetFormula(9, 103, srcSheet
));
6845 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.J4"_ustr
, m_pDoc
->GetFormula(9, 104, srcSheet
));
6846 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.J5"_ustr
, m_pDoc
->GetFormula(9, 105, srcSheet
));
6847 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.J6"_ustr
, m_pDoc
->GetFormula(9, 106, srcSheet
));
6848 CPPUNIT_ASSERT_EQUAL(u
"=DestSheet.J7"_ustr
, m_pDoc
->GetFormula(9, 107, srcSheet
));
6850 m_pDoc
->DeleteTab(destSheet
);
6851 m_pDoc
->DeleteTab(srcSheet
);
6854 CPPUNIT_TEST_FIXTURE(TestCopyPaste
, testTdf142201Row
)
6856 const SCTAB nTab
= 0;
6857 m_pDoc
->InsertTab(nTab
, u
"Test"_ustr
);
6859 m_pDoc
->SetValue(0, 0, nTab
, 1.0); // A1
6860 m_pDoc
->SetValue(0, 1, nTab
, 2.0); // A2
6861 m_pDoc
->SetValue(1, 0, nTab
, 11.0); // B1
6862 m_pDoc
->SetValue(1, 1, nTab
, 12.0); // B2
6864 m_pDoc
->SetString(0, 3, nTab
, u
"=A1"_ustr
); // A4
6865 m_pDoc
->SetString(0, 4, nTab
, u
"=A2"_ustr
); // A5
6866 m_pDoc
->SetString(1, 3, nTab
, u
"=B1"_ustr
); // B4
6867 m_pDoc
->SetString(1, 4, nTab
, u
"=B2"_ustr
); // B5
6869 // Check precondition
6870 CPPUNIT_ASSERT_EQUAL(1.0, m_pDoc
->GetValue(0, 3, nTab
));
6871 CPPUNIT_ASSERT_EQUAL(2.0, m_pDoc
->GetValue(0, 4, nTab
));
6872 CPPUNIT_ASSERT_EQUAL(11.0, m_pDoc
->GetValue(1, 3, nTab
));
6873 CPPUNIT_ASSERT_EQUAL(12.0, m_pDoc
->GetValue(1, 4, nTab
));
6875 ScRange
aReferencesRange(0, 3, nTab
, 1, 4, nTab
);
6876 printRange(m_pDoc
, ScRange(0, 0, nTab
, 1, 1, nTab
), "Source");
6877 printRange(m_pDoc
, aReferencesRange
, "References");
6878 printFormula(m_pDoc
, 0, 3, nTab
);
6879 printFormula(m_pDoc
, 0, 4, nTab
);
6880 printFormula(m_pDoc
, 1, 3, nTab
);
6881 printFormula(m_pDoc
, 1, 4, nTab
);
6883 // Cut A1:A2 to the clip document.
6884 ScDocument
aClipDoc(SCDOCMODE_CLIP
);
6885 ScRange
aSrcRange(0, 0, nTab
, 0, 1, nTab
);
6886 cutToClip(*m_xDocShell
, aSrcRange
, &aClipDoc
, false);
6889 ScRange
aDestRange(1, 6, nTab
, 2, 6, nTab
);
6890 ScMarkData
aDestMark(m_pDoc
->GetSheetLimits());
6893 ScDocument
* pOrigClipDoc
= &aClipDoc
;
6894 ScDocumentUniquePtr
pTransClip(new ScDocument(SCDOCMODE_CLIP
));
6895 aClipDoc
.TransposeClip(pTransClip
.get(), InsertDeleteFlags::ALL
, false, true);
6896 aDestMark
.SetMarkArea(aDestRange
);
6898 m_pDoc
->CopyFromClip(aDestRange
, aDestMark
, InsertDeleteFlags::ALL
, nullptr, pTransClip
.get(),
6899 true, false, true, false);
6900 printRange(m_pDoc
, aReferencesRange
, "References after cut");
6901 printFormula(m_pDoc
, 0, 3, nTab
);
6902 printFormula(m_pDoc
, 0, 4, nTab
);
6903 printFormula(m_pDoc
, 1, 3, nTab
);
6904 printFormula(m_pDoc
, 1, 4, nTab
);
6905 m_pDoc
->UpdateTranspose(aDestRange
.aStart
, pOrigClipDoc
, aDestMark
, nullptr);
6908 printRange(m_pDoc
, aReferencesRange
, "References after cut transposed");
6909 printFormula(m_pDoc
, 0, 3, nTab
);
6910 printFormula(m_pDoc
, 0, 4, nTab
);
6911 printFormula(m_pDoc
, 1, 3, nTab
);
6912 printFormula(m_pDoc
, 1, 4, nTab
);
6915 CPPUNIT_ASSERT_EQUAL(1.0, m_pDoc
->GetValue(0, 3, nTab
));
6916 CPPUNIT_ASSERT_EQUAL(2.0, m_pDoc
->GetValue(0, 4, nTab
));
6917 // Without the fix in place, this would have failed with
6920 CPPUNIT_ASSERT_EQUAL(11.0, m_pDoc
->GetValue(1, 3, nTab
));
6921 CPPUNIT_ASSERT_EQUAL(12.0, m_pDoc
->GetValue(1, 4, nTab
));
6923 CPPUNIT_ASSERT_EQUAL(u
"=B7"_ustr
, m_pDoc
->GetFormula(0, 3, nTab
));
6924 CPPUNIT_ASSERT_EQUAL(u
"=C7"_ustr
, m_pDoc
->GetFormula(0, 4, nTab
));
6925 CPPUNIT_ASSERT_EQUAL(u
"=B1"_ustr
, m_pDoc
->GetFormula(1, 3, nTab
));
6926 CPPUNIT_ASSERT_EQUAL(u
"=B2"_ustr
, m_pDoc
->GetFormula(1, 4, nTab
));
6929 CPPUNIT_TEST_FIXTURE(TestCopyPaste
, testTdf142201ColRel
)
6931 const SCTAB nTab
= 0;
6932 m_pDoc
->InsertTab(nTab
, u
"Test"_ustr
);
6934 m_pDoc
->SetValue(0, 0, nTab
, 1.0); // A1
6935 m_pDoc
->SetValue(0, 1, nTab
, 2.0); // A2
6936 m_pDoc
->SetValue(1, 0, nTab
, 11.0); // B1
6937 m_pDoc
->SetValue(1, 1, nTab
, 12.0); // B2
6939 m_pDoc
->SetString(0, 3, nTab
, u
"=A1"_ustr
); // A4
6940 m_pDoc
->SetString(0, 4, nTab
, u
"=A2"_ustr
); // A5
6941 m_pDoc
->SetString(1, 3, nTab
, u
"=B1"_ustr
); // B4
6942 m_pDoc
->SetString(1, 4, nTab
, u
"=B2"_ustr
); // B5
6944 // Check precondition
6945 CPPUNIT_ASSERT_EQUAL(1.0, m_pDoc
->GetValue(0, 3, nTab
));
6946 CPPUNIT_ASSERT_EQUAL(2.0, m_pDoc
->GetValue(0, 4, nTab
));
6947 CPPUNIT_ASSERT_EQUAL(11.0, m_pDoc
->GetValue(1, 3, nTab
));
6948 CPPUNIT_ASSERT_EQUAL(12.0, m_pDoc
->GetValue(1, 4, nTab
));
6950 ScRange
aReferencesRange(0, 3, nTab
, 1, 4, nTab
);
6951 printRange(m_pDoc
, ScRange(0, 0, nTab
, 1, 1, nTab
), "Source");
6952 printRange(m_pDoc
, aReferencesRange
, "References");
6953 printFormula(m_pDoc
, 0, 3, nTab
);
6954 printFormula(m_pDoc
, 0, 4, nTab
);
6955 printFormula(m_pDoc
, 1, 3, nTab
);
6956 printFormula(m_pDoc
, 1, 4, nTab
);
6958 // Cut values A1:B1 to the clip document.
6959 ScDocument
aClipDoc(SCDOCMODE_CLIP
);
6960 ScRange
aSrcRange(0, 0, nTab
, 1, 0, nTab
);
6961 cutToClip(*m_xDocShell
, aSrcRange
, &aClipDoc
, false);
6964 ScRange
aDestRange(1, 6, nTab
, 1, 7, nTab
);
6965 ScMarkData
aDestMark(m_pDoc
->GetSheetLimits());
6968 ScDocument
* pOrigClipDoc
= &aClipDoc
;
6969 ScDocumentUniquePtr
pTransClip(new ScDocument(SCDOCMODE_CLIP
));
6970 aClipDoc
.TransposeClip(pTransClip
.get(), InsertDeleteFlags::ALL
, false, true);
6971 aDestMark
.SetMarkArea(aDestRange
);
6973 m_pDoc
->CopyFromClip(aDestRange
, aDestMark
, InsertDeleteFlags::ALL
, nullptr, pTransClip
.get(),
6974 true, false, true, false);
6975 printRange(m_pDoc
, aReferencesRange
, "References after paste");
6976 printFormula(m_pDoc
, 0, 3, nTab
);
6977 printFormula(m_pDoc
, 0, 4, nTab
);
6978 printFormula(m_pDoc
, 1, 3, nTab
);
6979 printFormula(m_pDoc
, 1, 4, nTab
);
6980 m_pDoc
->UpdateTranspose(aDestRange
.aStart
, pOrigClipDoc
, aDestMark
, nullptr);
6983 printRange(m_pDoc
, aReferencesRange
, "References after paste transposed");
6984 printFormula(m_pDoc
, 0, 3, nTab
);
6985 printFormula(m_pDoc
, 0, 4, nTab
);
6986 printFormula(m_pDoc
, 1, 3, nTab
);
6987 printFormula(m_pDoc
, 1, 4, nTab
);
6990 CPPUNIT_ASSERT_EQUAL(1.0, m_pDoc
->GetValue(0, 3, nTab
));
6991 // Without the fix in place, this would have failed with
6994 CPPUNIT_ASSERT_EQUAL(2.0, m_pDoc
->GetValue(0, 4, nTab
));
6995 CPPUNIT_ASSERT_EQUAL(11.0, m_pDoc
->GetValue(1, 3, nTab
));
6996 CPPUNIT_ASSERT_EQUAL(12.0, m_pDoc
->GetValue(1, 4, nTab
));
6998 CPPUNIT_ASSERT_EQUAL(u
"=B7"_ustr
, m_pDoc
->GetFormula(0, 3, nTab
));
6999 CPPUNIT_ASSERT_EQUAL(u
"=A2"_ustr
, m_pDoc
->GetFormula(0, 4, nTab
));
7000 CPPUNIT_ASSERT_EQUAL(u
"=B8"_ustr
, m_pDoc
->GetFormula(1, 3, nTab
));
7001 CPPUNIT_ASSERT_EQUAL(u
"=B2"_ustr
, m_pDoc
->GetFormula(1, 4, nTab
));
7004 CPPUNIT_TEST_FIXTURE(TestCopyPaste
, testTdf142201ColAbs
)
7006 const SCTAB nTab
= 0;
7007 m_pDoc
->InsertTab(nTab
, u
"Test"_ustr
);
7009 m_pDoc
->SetValue(0, 0, nTab
, 1.0); // A1
7010 m_pDoc
->SetValue(0, 1, nTab
, 2.0); // A2
7011 m_pDoc
->SetValue(1, 0, nTab
, 11.0); // B1
7012 m_pDoc
->SetValue(1, 1, nTab
, 12.0); // B2
7014 m_pDoc
->SetString(0, 3, nTab
, u
"=$A$1"_ustr
); // A4
7015 m_pDoc
->SetString(0, 4, nTab
, u
"=$A$2"_ustr
); // A5
7016 m_pDoc
->SetString(1, 3, nTab
, u
"=$B$1"_ustr
); // B4
7017 m_pDoc
->SetString(1, 4, nTab
, u
"=$B$2"_ustr
); // B5
7019 // Check precondition
7020 CPPUNIT_ASSERT_EQUAL(1.0, m_pDoc
->GetValue(0, 3, nTab
));
7021 CPPUNIT_ASSERT_EQUAL(2.0, m_pDoc
->GetValue(0, 4, nTab
));
7022 CPPUNIT_ASSERT_EQUAL(11.0, m_pDoc
->GetValue(1, 3, nTab
));
7023 CPPUNIT_ASSERT_EQUAL(12.0, m_pDoc
->GetValue(1, 4, nTab
));
7025 ScRange
aReferencesRange(0, 3, nTab
, 1, 4, nTab
);
7026 printRange(m_pDoc
, ScRange(0, 0, nTab
, 1, 1, nTab
), "Source");
7027 printRange(m_pDoc
, aReferencesRange
, "References");
7028 printFormula(m_pDoc
, 0, 3, nTab
);
7029 printFormula(m_pDoc
, 0, 4, nTab
);
7030 printFormula(m_pDoc
, 1, 3, nTab
);
7031 printFormula(m_pDoc
, 1, 4, nTab
);
7033 // Cut values A1:B1 to the clip document.
7034 ScDocument
aClipDoc(SCDOCMODE_CLIP
);
7035 ScRange
aSrcRange(0, 0, nTab
, 1, 0, nTab
);
7036 cutToClip(*m_xDocShell
, aSrcRange
, &aClipDoc
, false);
7039 ScRange
aDestRange(1, 6, nTab
, 1, 7, nTab
);
7040 ScMarkData
aDestMark(m_pDoc
->GetSheetLimits());
7043 ScDocument
* pOrigClipDoc
= &aClipDoc
;
7044 ScDocumentUniquePtr
pTransClip(new ScDocument(SCDOCMODE_CLIP
));
7045 aClipDoc
.TransposeClip(pTransClip
.get(), InsertDeleteFlags::ALL
, false, true);
7046 aDestMark
.SetMarkArea(aDestRange
);
7048 m_pDoc
->CopyFromClip(aDestRange
, aDestMark
, InsertDeleteFlags::ALL
, nullptr, pTransClip
.get(),
7049 true, false, true, false);
7050 printRange(m_pDoc
, aReferencesRange
, "References after paste");
7051 printFormula(m_pDoc
, 0, 3, nTab
);
7052 printFormula(m_pDoc
, 0, 4, nTab
);
7053 printFormula(m_pDoc
, 1, 3, nTab
);
7054 printFormula(m_pDoc
, 1, 4, nTab
);
7055 m_pDoc
->UpdateTranspose(aDestRange
.aStart
, pOrigClipDoc
, aDestMark
, nullptr);
7058 printRange(m_pDoc
, aReferencesRange
, "References after paste transposed");
7059 printFormula(m_pDoc
, 0, 3, nTab
);
7060 printFormula(m_pDoc
, 0, 4, nTab
);
7061 printFormula(m_pDoc
, 1, 3, nTab
);
7062 printFormula(m_pDoc
, 1, 4, nTab
);
7065 CPPUNIT_ASSERT_EQUAL(1.0, m_pDoc
->GetValue(0, 3, nTab
));
7066 // Without the fix in place, this would have failed with
7069 CPPUNIT_ASSERT_EQUAL(2.0, m_pDoc
->GetValue(0, 4, nTab
));
7070 CPPUNIT_ASSERT_EQUAL(11.0, m_pDoc
->GetValue(1, 3, nTab
));
7071 CPPUNIT_ASSERT_EQUAL(12.0, m_pDoc
->GetValue(1, 4, nTab
));
7073 CPPUNIT_ASSERT_EQUAL(u
"=$B$7"_ustr
, m_pDoc
->GetFormula(0, 3, nTab
));
7074 CPPUNIT_ASSERT_EQUAL(u
"=$A$2"_ustr
, m_pDoc
->GetFormula(0, 4, nTab
));
7075 CPPUNIT_ASSERT_EQUAL(u
"=$B$8"_ustr
, m_pDoc
->GetFormula(1, 3, nTab
));
7076 CPPUNIT_ASSERT_EQUAL(u
"=$B$2"_ustr
, m_pDoc
->GetFormula(1, 4, nTab
));
7079 void TestCopyPaste::checkReferencedCutRangesRowIntitial(const SCTAB nSrcTab
, const OUString
& rDesc
)
7081 printRange(m_pDoc
, ScRange(1, 1, nSrcTab
, 3, 2, nSrcTab
), rDesc
.toUtf8() + ": Source");
7082 CPPUNIT_ASSERT_EQUAL(01.0, m_pDoc
->GetValue(1, 1, nSrcTab
));
7083 CPPUNIT_ASSERT_EQUAL(11.0, m_pDoc
->GetValue(2, 1, nSrcTab
));
7084 CPPUNIT_ASSERT_EQUAL(21.0, m_pDoc
->GetValue(3, 1, nSrcTab
));
7085 CPPUNIT_ASSERT_EQUAL(02.0, m_pDoc
->GetValue(1, 2, nSrcTab
));
7086 CPPUNIT_ASSERT_EQUAL(12.0, m_pDoc
->GetValue(2, 2, nSrcTab
));
7087 CPPUNIT_ASSERT_EQUAL(22.0, m_pDoc
->GetValue(3, 2, nSrcTab
));
7090 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(0, 0, nSrcTab
)); // A1
7091 CPPUNIT_ASSERT_EQUAL(1001.0, m_pDoc
->GetValue(1, 0, nSrcTab
)); // B1
7092 CPPUNIT_ASSERT_EQUAL(1002.0, m_pDoc
->GetValue(2, 0, nSrcTab
)); // C1
7093 CPPUNIT_ASSERT_EQUAL(1003.0, m_pDoc
->GetValue(3, 0, nSrcTab
)); // D1
7094 CPPUNIT_ASSERT_EQUAL(1004.0, m_pDoc
->GetValue(4, 0, nSrcTab
)); // E1
7095 CPPUNIT_ASSERT_EQUAL(1010.0, m_pDoc
->GetValue(0, 1, nSrcTab
)); // A2
7096 CPPUNIT_ASSERT_EQUAL(1014.0, m_pDoc
->GetValue(4, 1, nSrcTab
)); // E2
7097 CPPUNIT_ASSERT_EQUAL(1020.0, m_pDoc
->GetValue(0, 2, nSrcTab
)); // A3
7098 CPPUNIT_ASSERT_EQUAL(1024.0, m_pDoc
->GetValue(4, 2, nSrcTab
)); // E3
7099 CPPUNIT_ASSERT_EQUAL(1030.0, m_pDoc
->GetValue(0, 3, nSrcTab
)); // A4
7100 CPPUNIT_ASSERT_EQUAL(1031.0, m_pDoc
->GetValue(1, 3, nSrcTab
)); // B4
7101 CPPUNIT_ASSERT_EQUAL(1032.0, m_pDoc
->GetValue(2, 3, nSrcTab
)); // C4
7102 CPPUNIT_ASSERT_EQUAL(1033.0, m_pDoc
->GetValue(3, 3, nSrcTab
)); // D4
7103 CPPUNIT_ASSERT_EQUAL(1034.0, m_pDoc
->GetValue(4, 3, nSrcTab
)); // E4
7104 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(20, 0, nSrcTab
)); // U1
7105 CPPUNIT_ASSERT_EQUAL(1001.0, m_pDoc
->GetValue(21, 0, nSrcTab
)); // V1
7106 CPPUNIT_ASSERT_EQUAL(1002.0, m_pDoc
->GetValue(22, 0, nSrcTab
)); // W1
7107 CPPUNIT_ASSERT_EQUAL(1003.0, m_pDoc
->GetValue(23, 0, nSrcTab
)); // X1
7108 CPPUNIT_ASSERT_EQUAL(1004.0, m_pDoc
->GetValue(24, 0, nSrcTab
)); // Y1
7109 CPPUNIT_ASSERT_EQUAL(1010.0, m_pDoc
->GetValue(20, 1, nSrcTab
)); // U2
7110 CPPUNIT_ASSERT_EQUAL(1014.0, m_pDoc
->GetValue(24, 1, nSrcTab
)); // Y2
7111 CPPUNIT_ASSERT_EQUAL(1020.0, m_pDoc
->GetValue(20, 2, nSrcTab
)); // U3
7112 CPPUNIT_ASSERT_EQUAL(1024.0, m_pDoc
->GetValue(24, 2, nSrcTab
)); // Y3
7113 CPPUNIT_ASSERT_EQUAL(1030.0, m_pDoc
->GetValue(20, 3, nSrcTab
)); // U4
7114 CPPUNIT_ASSERT_EQUAL(1031.0, m_pDoc
->GetValue(21, 3, nSrcTab
)); // B4
7115 CPPUNIT_ASSERT_EQUAL(1032.0, m_pDoc
->GetValue(22, 3, nSrcTab
)); // W4
7116 CPPUNIT_ASSERT_EQUAL(1033.0, m_pDoc
->GetValue(23, 3, nSrcTab
)); // X4
7117 CPPUNIT_ASSERT_EQUAL(1034.0, m_pDoc
->GetValue(24, 3, nSrcTab
)); // Y4
7118 CPPUNIT_ASSERT_EQUAL(u
"=A1"_ustr
, m_pDoc
->GetFormula(20, 0, nSrcTab
)); // U1
7119 CPPUNIT_ASSERT_EQUAL(u
"=B1"_ustr
, m_pDoc
->GetFormula(21, 0, nSrcTab
)); // V1
7120 CPPUNIT_ASSERT_EQUAL(u
"=C1"_ustr
, m_pDoc
->GetFormula(22, 0, nSrcTab
)); // W1
7121 CPPUNIT_ASSERT_EQUAL(u
"=D1"_ustr
, m_pDoc
->GetFormula(23, 0, nSrcTab
)); // X1
7122 CPPUNIT_ASSERT_EQUAL(u
"=E1"_ustr
, m_pDoc
->GetFormula(24, 0, nSrcTab
)); // Y1
7123 CPPUNIT_ASSERT_EQUAL(u
"=A2"_ustr
, m_pDoc
->GetFormula(20, 1, nSrcTab
)); // U2
7124 CPPUNIT_ASSERT_EQUAL(u
"=E2"_ustr
, m_pDoc
->GetFormula(24, 1, nSrcTab
)); // Y2
7125 CPPUNIT_ASSERT_EQUAL(u
"=A3"_ustr
, m_pDoc
->GetFormula(20, 2, nSrcTab
)); // U3
7126 CPPUNIT_ASSERT_EQUAL(u
"=E3"_ustr
, m_pDoc
->GetFormula(24, 2, nSrcTab
)); // Y3
7127 CPPUNIT_ASSERT_EQUAL(u
"=A4"_ustr
, m_pDoc
->GetFormula(20, 3, nSrcTab
)); // U4
7128 CPPUNIT_ASSERT_EQUAL(u
"=B4"_ustr
, m_pDoc
->GetFormula(21, 3, nSrcTab
)); // B4
7129 CPPUNIT_ASSERT_EQUAL(u
"=C4"_ustr
, m_pDoc
->GetFormula(22, 3, nSrcTab
)); // W4
7130 CPPUNIT_ASSERT_EQUAL(u
"=D4"_ustr
, m_pDoc
->GetFormula(23, 3, nSrcTab
)); // X4
7131 CPPUNIT_ASSERT_EQUAL(u
"=E4"_ustr
, m_pDoc
->GetFormula(24, 3, nSrcTab
)); // Y4
7133 for (int i
= 10; i
< 20; ++i
)
7134 for (int j
= 0; j
< 10; ++j
)
7136 CPPUNIT_ASSERT_EQUAL(0.0, m_pDoc
->GetValue(j
, i
, nSrcTab
));
7137 CPPUNIT_ASSERT_EQUAL(OUString(), m_pDoc
->GetFormula(j
, i
, nSrcTab
));
7140 printValuesAndFormulasInRange(m_pDoc
, ScRange(0, 20, nSrcTab
, 2, 21, nSrcTab
),
7141 rDesc
.toUtf8() + ": Relative references");
7142 CPPUNIT_ASSERT_EQUAL(u
"=B2"_ustr
, m_pDoc
->GetFormula(0, 20, nSrcTab
)); // A21
7143 CPPUNIT_ASSERT_EQUAL(u
"=C2"_ustr
, m_pDoc
->GetFormula(1, 20, nSrcTab
)); // B21
7144 CPPUNIT_ASSERT_EQUAL(u
"=D2"_ustr
, m_pDoc
->GetFormula(2, 20, nSrcTab
)); // C21
7145 CPPUNIT_ASSERT_EQUAL(u
"=B3"_ustr
, m_pDoc
->GetFormula(0, 21, nSrcTab
)); // A22
7146 CPPUNIT_ASSERT_EQUAL(u
"=C3"_ustr
, m_pDoc
->GetFormula(1, 21, nSrcTab
)); // B22
7147 CPPUNIT_ASSERT_EQUAL(u
"=D3"_ustr
, m_pDoc
->GetFormula(2, 21, nSrcTab
)); // C22
7148 CPPUNIT_ASSERT_EQUAL(01.0, m_pDoc
->GetValue(0, 20, nSrcTab
));
7149 CPPUNIT_ASSERT_EQUAL(11.0, m_pDoc
->GetValue(1, 20, nSrcTab
));
7150 CPPUNIT_ASSERT_EQUAL(21.0, m_pDoc
->GetValue(2, 20, nSrcTab
));
7151 CPPUNIT_ASSERT_EQUAL(02.0, m_pDoc
->GetValue(0, 21, nSrcTab
));
7152 CPPUNIT_ASSERT_EQUAL(12.0, m_pDoc
->GetValue(1, 21, nSrcTab
));
7153 CPPUNIT_ASSERT_EQUAL(22.0, m_pDoc
->GetValue(2, 21, nSrcTab
));
7155 printValuesAndFormulasInRange(m_pDoc
, ScRange(0, 30, nSrcTab
, 2, 31, nSrcTab
),
7156 rDesc
.toUtf8() + ": Absolute references");
7157 CPPUNIT_ASSERT_EQUAL(u
"=$B$2"_ustr
, m_pDoc
->GetFormula(0, 30, nSrcTab
)); // A31
7158 CPPUNIT_ASSERT_EQUAL(u
"=$C$2"_ustr
, m_pDoc
->GetFormula(1, 30, nSrcTab
)); // B31
7159 CPPUNIT_ASSERT_EQUAL(u
"=$D$2"_ustr
, m_pDoc
->GetFormula(2, 30, nSrcTab
)); // C31
7160 CPPUNIT_ASSERT_EQUAL(u
"=$B$3"_ustr
, m_pDoc
->GetFormula(0, 31, nSrcTab
)); // A32
7161 CPPUNIT_ASSERT_EQUAL(u
"=$C$3"_ustr
, m_pDoc
->GetFormula(1, 31, nSrcTab
)); // B32
7162 CPPUNIT_ASSERT_EQUAL(u
"=$D$3"_ustr
, m_pDoc
->GetFormula(2, 31, nSrcTab
)); // C32
7163 CPPUNIT_ASSERT_EQUAL(01.0, m_pDoc
->GetValue(0, 30, nSrcTab
));
7164 CPPUNIT_ASSERT_EQUAL(11.0, m_pDoc
->GetValue(1, 30, nSrcTab
));
7165 CPPUNIT_ASSERT_EQUAL(21.0, m_pDoc
->GetValue(2, 30, nSrcTab
));
7166 CPPUNIT_ASSERT_EQUAL(02.0, m_pDoc
->GetValue(0, 31, nSrcTab
));
7167 CPPUNIT_ASSERT_EQUAL(12.0, m_pDoc
->GetValue(1, 31, nSrcTab
));
7168 CPPUNIT_ASSERT_EQUAL(22.0, m_pDoc
->GetValue(2, 31, nSrcTab
));
7170 CPPUNIT_ASSERT_EQUAL(u
"$Test.$B$2"_ustr
, getRangeByName(u
"Range_B2"_ustr
));
7171 CPPUNIT_ASSERT_EQUAL(u
"$Test.$C$2"_ustr
, getRangeByName(u
"Range_C2"_ustr
));
7172 CPPUNIT_ASSERT_EQUAL(u
"$Test.$D$2"_ustr
, getRangeByName(u
"Range_D2"_ustr
));
7173 CPPUNIT_ASSERT_EQUAL(u
"$Test.$B$3"_ustr
, getRangeByName(u
"Range_B3"_ustr
));
7174 CPPUNIT_ASSERT_EQUAL(u
"$Test.$C$3"_ustr
, getRangeByName(u
"Range_C3"_ustr
));
7175 CPPUNIT_ASSERT_EQUAL(u
"$Test.$D$3"_ustr
, getRangeByName(u
"Range_D3"_ustr
));
7176 CPPUNIT_ASSERT_EQUAL(u
"$Test.$B$2:$D$2"_ustr
, getRangeByName(u
"Range_B2_D2"_ustr
));
7177 CPPUNIT_ASSERT_EQUAL(u
"$Test.$B$3:$D$3"_ustr
, getRangeByName(u
"Range_B3_D3"_ustr
));
7178 CPPUNIT_ASSERT_EQUAL(u
"$Test.$B$2:$D$3"_ustr
, getRangeByName(u
"Range_B2_D3"_ustr
));
7179 CPPUNIT_ASSERT_EQUAL(u
"B2"_ustr
, getRangeByName(u
"RelRange_Cm20_R0"_ustr
));
7181 printValuesAndFormulasInRange(m_pDoc
, ScRange(0, 40, nSrcTab
, 2, 41, nSrcTab
),
7182 rDesc
.toUtf8() + ": Absolute ranges");
7183 CPPUNIT_ASSERT_EQUAL(u
"=Range_B2"_ustr
, m_pDoc
->GetFormula(0, 40, nSrcTab
)); // A41
7184 CPPUNIT_ASSERT_EQUAL(u
"=Range_C2"_ustr
, m_pDoc
->GetFormula(1, 40, nSrcTab
)); // B41
7185 CPPUNIT_ASSERT_EQUAL(u
"=Range_D2"_ustr
, m_pDoc
->GetFormula(2, 40, nSrcTab
)); // C41
7186 CPPUNIT_ASSERT_EQUAL(u
"=Range_B3"_ustr
, m_pDoc
->GetFormula(0, 41, nSrcTab
)); // A42
7187 CPPUNIT_ASSERT_EQUAL(u
"=Range_C3"_ustr
, m_pDoc
->GetFormula(1, 41, nSrcTab
)); // B42
7188 CPPUNIT_ASSERT_EQUAL(u
"=Range_D3"_ustr
, m_pDoc
->GetFormula(2, 41, nSrcTab
)); // C42
7189 CPPUNIT_ASSERT_EQUAL(01.0, m_pDoc
->GetValue(0, 40, nSrcTab
));
7190 CPPUNIT_ASSERT_EQUAL(11.0, m_pDoc
->GetValue(1, 40, nSrcTab
));
7191 CPPUNIT_ASSERT_EQUAL(21.0, m_pDoc
->GetValue(2, 40, nSrcTab
));
7192 CPPUNIT_ASSERT_EQUAL(02.0, m_pDoc
->GetValue(0, 41, nSrcTab
));
7193 CPPUNIT_ASSERT_EQUAL(12.0, m_pDoc
->GetValue(1, 41, nSrcTab
));
7194 CPPUNIT_ASSERT_EQUAL(22.0, m_pDoc
->GetValue(2, 41, nSrcTab
));
7196 printValuesAndFormulasInRange(m_pDoc
, ScRange(0, 50, nSrcTab
, 2, 51, nSrcTab
),
7197 rDesc
.toUtf8() + ": Relative ranges");
7198 CPPUNIT_ASSERT_EQUAL(u
"=RelRange_Cm20_R0"_ustr
, m_pDoc
->GetFormula(0, 50, nSrcTab
)); // A51
7199 CPPUNIT_ASSERT_EQUAL(u
"=RelRange_Cm20_R0"_ustr
, m_pDoc
->GetFormula(1, 50, nSrcTab
)); // B51
7200 CPPUNIT_ASSERT_EQUAL(u
"=RelRange_Cm20_R0"_ustr
, m_pDoc
->GetFormula(2, 50, nSrcTab
)); // C51
7201 CPPUNIT_ASSERT_EQUAL(u
"=RelRange_Cm20_R0"_ustr
, m_pDoc
->GetFormula(0, 51, nSrcTab
)); // A52
7202 CPPUNIT_ASSERT_EQUAL(u
"=RelRange_Cm20_R0"_ustr
, m_pDoc
->GetFormula(1, 51, nSrcTab
)); // B52
7203 CPPUNIT_ASSERT_EQUAL(u
"=RelRange_Cm20_R0"_ustr
, m_pDoc
->GetFormula(2, 51, nSrcTab
)); // C52
7204 CPPUNIT_ASSERT_EQUAL(01.0, m_pDoc
->GetValue(0, 50, nSrcTab
));
7205 CPPUNIT_ASSERT_EQUAL(11.0, m_pDoc
->GetValue(1, 50, nSrcTab
));
7206 CPPUNIT_ASSERT_EQUAL(21.0, m_pDoc
->GetValue(2, 50, nSrcTab
));
7207 CPPUNIT_ASSERT_EQUAL(02.0, m_pDoc
->GetValue(0, 51, nSrcTab
));
7208 CPPUNIT_ASSERT_EQUAL(12.0, m_pDoc
->GetValue(1, 51, nSrcTab
));
7209 CPPUNIT_ASSERT_EQUAL(22.0, m_pDoc
->GetValue(2, 51, nSrcTab
));
7211 printValuesAndFormulasInRange(m_pDoc
, ScRange(0, 60, nSrcTab
, 2, 61, nSrcTab
),
7212 rDesc
.toUtf8() + ": Relative sum");
7213 CPPUNIT_ASSERT_EQUAL(u
"=SUM(B2:D2)"_ustr
, m_pDoc
->GetFormula(0, 60, nSrcTab
)); // A61
7214 CPPUNIT_ASSERT_EQUAL(u
"=SUM(B2:D2)"_ustr
, m_pDoc
->GetFormula(1, 60, nSrcTab
)); // B61
7215 CPPUNIT_ASSERT_EQUAL(u
"=SUM(B2:D2)"_ustr
, m_pDoc
->GetFormula(2, 60, nSrcTab
)); // C61
7216 CPPUNIT_ASSERT_EQUAL(u
"=SUM(B3:D3)"_ustr
, m_pDoc
->GetFormula(0, 61, nSrcTab
)); // A62
7217 CPPUNIT_ASSERT_EQUAL(u
"=SUM(B3:D3)"_ustr
, m_pDoc
->GetFormula(1, 61, nSrcTab
)); // B62
7218 CPPUNIT_ASSERT_EQUAL(u
"=SUM(B3:D3)"_ustr
, m_pDoc
->GetFormula(2, 61, nSrcTab
)); // C62
7219 CPPUNIT_ASSERT_EQUAL(33.0, m_pDoc
->GetValue(0, 60, nSrcTab
));
7220 CPPUNIT_ASSERT_EQUAL(33.0, m_pDoc
->GetValue(1, 60, nSrcTab
));
7221 CPPUNIT_ASSERT_EQUAL(33.0, m_pDoc
->GetValue(2, 60, nSrcTab
));
7222 CPPUNIT_ASSERT_EQUAL(36.0, m_pDoc
->GetValue(0, 61, nSrcTab
));
7223 CPPUNIT_ASSERT_EQUAL(36.0, m_pDoc
->GetValue(1, 61, nSrcTab
));
7224 CPPUNIT_ASSERT_EQUAL(36.0, m_pDoc
->GetValue(2, 61, nSrcTab
));
7226 printValuesAndFormulasInRange(m_pDoc
, ScRange(0, 70, nSrcTab
, 2, 71, nSrcTab
),
7227 rDesc
.toUtf8() + ": Absolute sum");
7228 CPPUNIT_ASSERT_EQUAL(u
"=SUM($B$2:$D$2)"_ustr
, m_pDoc
->GetFormula(0, 70, nSrcTab
)); // A71
7229 CPPUNIT_ASSERT_EQUAL(u
"=SUM($B$2:$D$2)"_ustr
, m_pDoc
->GetFormula(1, 70, nSrcTab
)); // B71
7230 CPPUNIT_ASSERT_EQUAL(u
"=SUM($B$2:$D$2)"_ustr
, m_pDoc
->GetFormula(2, 70, nSrcTab
)); // C71
7231 CPPUNIT_ASSERT_EQUAL(u
"=SUM($B$3:$D$3)"_ustr
, m_pDoc
->GetFormula(0, 71, nSrcTab
)); // A72
7232 CPPUNIT_ASSERT_EQUAL(u
"=SUM($B$3:$D$3)"_ustr
, m_pDoc
->GetFormula(1, 71, nSrcTab
)); // B72
7233 CPPUNIT_ASSERT_EQUAL(u
"=SUM($B$3:$D$3)"_ustr
, m_pDoc
->GetFormula(2, 71, nSrcTab
)); // C72
7234 CPPUNIT_ASSERT_EQUAL(33.0, m_pDoc
->GetValue(0, 70, nSrcTab
));
7235 CPPUNIT_ASSERT_EQUAL(33.0, m_pDoc
->GetValue(1, 70, nSrcTab
));
7236 CPPUNIT_ASSERT_EQUAL(33.0, m_pDoc
->GetValue(2, 70, nSrcTab
));
7237 CPPUNIT_ASSERT_EQUAL(36.0, m_pDoc
->GetValue(0, 71, nSrcTab
));
7238 CPPUNIT_ASSERT_EQUAL(36.0, m_pDoc
->GetValue(1, 71, nSrcTab
));
7239 CPPUNIT_ASSERT_EQUAL(36.0, m_pDoc
->GetValue(2, 71, nSrcTab
));
7241 printValuesAndFormulasInRange(m_pDoc
, ScRange(0, 80, nSrcTab
, 2, 81, nSrcTab
),
7242 rDesc
.toUtf8() + ": Relative range sum");
7243 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_B2_D2)"_ustr
, m_pDoc
->GetFormula(0, 80, nSrcTab
)); // A81
7244 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_B2_D2)"_ustr
, m_pDoc
->GetFormula(1, 80, nSrcTab
)); // B81
7245 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_B2_D2)"_ustr
, m_pDoc
->GetFormula(2, 80, nSrcTab
)); // C81
7246 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_B3_D3)"_ustr
, m_pDoc
->GetFormula(0, 81, nSrcTab
)); // A82
7247 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_B3_D3)"_ustr
, m_pDoc
->GetFormula(1, 81, nSrcTab
)); // B82
7248 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_B3_D3)"_ustr
, m_pDoc
->GetFormula(2, 81, nSrcTab
)); // C82
7249 CPPUNIT_ASSERT_EQUAL(33.0, m_pDoc
->GetValue(0, 80, nSrcTab
));
7250 CPPUNIT_ASSERT_EQUAL(33.0, m_pDoc
->GetValue(1, 80, nSrcTab
));
7251 CPPUNIT_ASSERT_EQUAL(33.0, m_pDoc
->GetValue(2, 80, nSrcTab
));
7252 CPPUNIT_ASSERT_EQUAL(36.0, m_pDoc
->GetValue(0, 81, nSrcTab
));
7253 CPPUNIT_ASSERT_EQUAL(36.0, m_pDoc
->GetValue(1, 81, nSrcTab
));
7254 CPPUNIT_ASSERT_EQUAL(36.0, m_pDoc
->GetValue(2, 81, nSrcTab
));
7256 printValuesAndFormulasInRange(m_pDoc
, ScRange(0, 90, nSrcTab
, 2, 91, nSrcTab
),
7257 rDesc
.toUtf8() + ": Absolute sum");
7258 CPPUNIT_ASSERT_EQUAL(u
"=SUM($B$2:$D$3)"_ustr
, m_pDoc
->GetFormula(0, 90, nSrcTab
)); // A91
7259 CPPUNIT_ASSERT_EQUAL(u
"=SUM($B$2:$D$3)"_ustr
, m_pDoc
->GetFormula(1, 90, nSrcTab
)); // B91
7260 CPPUNIT_ASSERT_EQUAL(u
"=SUM($B$2:$D$3)"_ustr
, m_pDoc
->GetFormula(2, 90, nSrcTab
)); // C91
7261 CPPUNIT_ASSERT_EQUAL(u
"=SUM($B$2:$D$3)"_ustr
, m_pDoc
->GetFormula(0, 91, nSrcTab
)); // A92
7262 CPPUNIT_ASSERT_EQUAL(u
"=SUM($B$2:$D$3)"_ustr
, m_pDoc
->GetFormula(1, 91, nSrcTab
)); // B92
7263 CPPUNIT_ASSERT_EQUAL(u
"=SUM($B$2:$D$3)"_ustr
, m_pDoc
->GetFormula(2, 91, nSrcTab
)); // C92
7264 CPPUNIT_ASSERT_EQUAL(69.0, m_pDoc
->GetValue(0, 90, nSrcTab
));
7265 CPPUNIT_ASSERT_EQUAL(69.0, m_pDoc
->GetValue(1, 90, nSrcTab
));
7266 CPPUNIT_ASSERT_EQUAL(69.0, m_pDoc
->GetValue(2, 90, nSrcTab
));
7267 CPPUNIT_ASSERT_EQUAL(69.0, m_pDoc
->GetValue(0, 91, nSrcTab
));
7268 CPPUNIT_ASSERT_EQUAL(69.0, m_pDoc
->GetValue(1, 91, nSrcTab
));
7269 CPPUNIT_ASSERT_EQUAL(69.0, m_pDoc
->GetValue(2, 91, nSrcTab
));
7271 printValuesAndFormulasInRange(m_pDoc
, ScRange(0, 100, nSrcTab
, 2, 101, nSrcTab
),
7272 rDesc
.toUtf8() + ": Relative range sum");
7273 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_B2_D3)"_ustr
, m_pDoc
->GetFormula(0, 100, nSrcTab
)); // A101
7274 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_B2_D3)"_ustr
, m_pDoc
->GetFormula(1, 100, nSrcTab
)); // B101
7275 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_B2_D3)"_ustr
, m_pDoc
->GetFormula(2, 100, nSrcTab
)); // C101
7276 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_B2_D3)"_ustr
, m_pDoc
->GetFormula(0, 101, nSrcTab
)); // A102
7277 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_B2_D3)"_ustr
, m_pDoc
->GetFormula(1, 101, nSrcTab
)); // B102
7278 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_B2_D3)"_ustr
, m_pDoc
->GetFormula(2, 101, nSrcTab
)); // C102
7279 CPPUNIT_ASSERT_EQUAL(69.0, m_pDoc
->GetValue(0, 100, nSrcTab
));
7280 CPPUNIT_ASSERT_EQUAL(69.0, m_pDoc
->GetValue(1, 100, nSrcTab
));
7281 CPPUNIT_ASSERT_EQUAL(69.0, m_pDoc
->GetValue(2, 100, nSrcTab
));
7282 CPPUNIT_ASSERT_EQUAL(69.0, m_pDoc
->GetValue(0, 101, nSrcTab
));
7283 CPPUNIT_ASSERT_EQUAL(69.0, m_pDoc
->GetValue(1, 101, nSrcTab
));
7284 CPPUNIT_ASSERT_EQUAL(69.0, m_pDoc
->GetValue(2, 101, nSrcTab
));
7287 void TestCopyPaste::executeReferencedCutRangesRow(const bool bTransposed
, const SCTAB nSrcTab
,
7288 const SCTAB nDestTab
, const bool bUndo
,
7289 std::unique_ptr
<ScUndoCut
>& pUndoCut
,
7290 std::unique_ptr
<ScUndoPaste
>& pUndoPaste
)
7292 sc::AutoCalcSwitch
aACSwitch(*m_pDoc
, true); // turn on auto calc.
7294 for (int i
= 0; i
< nSrcTab
; ++i
)
7295 m_pDoc
->InsertTab(i
, "Empty Tab " + OUString::number(i
));
7296 m_pDoc
->InsertTab(nSrcTab
, u
"Test"_ustr
);
7298 m_pDoc
->SetValue(1, 1, nSrcTab
, 01.0); // B2 \.
7299 m_pDoc
->SetValue(2, 1, nSrcTab
, 11.0); // C2 | cut
7300 m_pDoc
->SetValue(3, 1, nSrcTab
, 21.0); // D2 /
7301 m_pDoc
->SetValue(1, 2, nSrcTab
, 02.0); // B3
7302 m_pDoc
->SetValue(2, 2, nSrcTab
, 12.0); // C3
7303 m_pDoc
->SetValue(3, 2, nSrcTab
, 22.0); // D3
7304 printRange(m_pDoc
, ScRange(1, 1, nSrcTab
, 3, 2, nSrcTab
), "Source");
7307 m_pDoc
->SetValue(0, 0, nSrcTab
, 1000.0); // A1
7308 m_pDoc
->SetValue(1, 0, nSrcTab
, 1001.0); // B1
7309 m_pDoc
->SetValue(2, 0, nSrcTab
, 1002.0); // C1
7310 m_pDoc
->SetValue(3, 0, nSrcTab
, 1003.0); // D1
7311 m_pDoc
->SetValue(4, 0, nSrcTab
, 1004.0); // E1
7312 m_pDoc
->SetValue(0, 1, nSrcTab
, 1010.0); // A2
7313 m_pDoc
->SetValue(4, 1, nSrcTab
, 1014.0); // E2
7314 m_pDoc
->SetValue(0, 2, nSrcTab
, 1020.0); // A3
7315 m_pDoc
->SetValue(4, 2, nSrcTab
, 1024.0); // E3
7316 m_pDoc
->SetValue(0, 3, nSrcTab
, 1030.0); // A4
7317 m_pDoc
->SetValue(1, 3, nSrcTab
, 1031.0); // B4
7318 m_pDoc
->SetValue(2, 3, nSrcTab
, 1032.0); // C4
7319 m_pDoc
->SetValue(3, 3, nSrcTab
, 1033.0); // D4
7320 m_pDoc
->SetValue(4, 3, nSrcTab
, 1034.0); // E4
7322 m_pDoc
->SetString(20, 0, nSrcTab
, u
"=A1"_ustr
); // U1
7323 m_pDoc
->SetString(21, 0, nSrcTab
, u
"=B1"_ustr
); // V1
7324 m_pDoc
->SetString(22, 0, nSrcTab
, u
"=C1"_ustr
); // W1
7325 m_pDoc
->SetString(23, 0, nSrcTab
, u
"=D1"_ustr
); // X1
7326 m_pDoc
->SetString(24, 0, nSrcTab
, u
"=E1"_ustr
); // Y1
7327 m_pDoc
->SetString(20, 1, nSrcTab
, u
"=A2"_ustr
); // U2
7328 m_pDoc
->SetString(24, 1, nSrcTab
, u
"=E2"_ustr
); // Y2
7329 m_pDoc
->SetString(20, 2, nSrcTab
, u
"=A3"_ustr
); // U3
7330 m_pDoc
->SetString(24, 2, nSrcTab
, u
"=E3"_ustr
); // Y3
7331 m_pDoc
->SetString(20, 3, nSrcTab
, u
"=A4"_ustr
); // U4
7332 m_pDoc
->SetString(21, 3, nSrcTab
, u
"=B4"_ustr
); // B4
7333 m_pDoc
->SetString(22, 3, nSrcTab
, u
"=C4"_ustr
); // W4
7334 m_pDoc
->SetString(23, 3, nSrcTab
, u
"=D4"_ustr
); // X4
7335 m_pDoc
->SetString(24, 3, nSrcTab
, u
"=E4"_ustr
); // Y4
7337 // Cell position is used for ranges relative to current position
7338 ScAddress
cellA1(0, 0, nSrcTab
);
7339 CPPUNIT_ASSERT(m_pDoc
->InsertNewRangeName(u
"Range_B2"_ustr
, cellA1
, u
"$Test.$B$2"_ustr
));
7340 CPPUNIT_ASSERT(m_pDoc
->InsertNewRangeName(u
"Range_C2"_ustr
, cellA1
, u
"$Test.$C$2"_ustr
));
7341 CPPUNIT_ASSERT(m_pDoc
->InsertNewRangeName(u
"Range_D2"_ustr
, cellA1
, u
"$Test.$D$2"_ustr
));
7342 CPPUNIT_ASSERT(m_pDoc
->InsertNewRangeName(u
"Range_B3"_ustr
, cellA1
, u
"$Test.$B$3"_ustr
));
7343 CPPUNIT_ASSERT(m_pDoc
->InsertNewRangeName(u
"Range_C3"_ustr
, cellA1
, u
"$Test.$C$3"_ustr
));
7344 CPPUNIT_ASSERT(m_pDoc
->InsertNewRangeName(u
"Range_D3"_ustr
, cellA1
, u
"$Test.$D$3"_ustr
));
7346 m_pDoc
->InsertNewRangeName(u
"Range_B2_D2"_ustr
, cellA1
, u
"$Test.$B$2:$D$2"_ustr
));
7348 m_pDoc
->InsertNewRangeName(u
"Range_B3_D3"_ustr
, cellA1
, u
"$Test.$B$3:$D$3"_ustr
));
7350 m_pDoc
->InsertNewRangeName(u
"Range_B2_D3"_ustr
, cellA1
, u
"$Test.$B$2:$D$3"_ustr
));
7351 CPPUNIT_ASSERT(m_pDoc
->InsertNewRangeName(u
"RelRange_Cm20_R0"_ustr
, ScAddress(1, 21, nSrcTab
),
7354 m_pDoc
->SetString(0, 20, nSrcTab
, u
"=B2"_ustr
); // A21
7355 m_pDoc
->SetString(1, 20, nSrcTab
, u
"=C2"_ustr
); // B21
7356 m_pDoc
->SetString(2, 20, nSrcTab
, u
"=D2"_ustr
); // C21
7357 m_pDoc
->SetString(0, 21, nSrcTab
, u
"=B3"_ustr
); // A22
7358 m_pDoc
->SetString(1, 21, nSrcTab
, u
"=C3"_ustr
); // B22
7359 m_pDoc
->SetString(2, 21, nSrcTab
, u
"=D3"_ustr
); // C22
7361 m_pDoc
->SetString(0, 30, nSrcTab
, u
"=$B$2"_ustr
); // A31
7362 m_pDoc
->SetString(1, 30, nSrcTab
, u
"=$C$2"_ustr
); // B31
7363 m_pDoc
->SetString(2, 30, nSrcTab
, u
"=$D$2"_ustr
); // C31
7364 m_pDoc
->SetString(0, 31, nSrcTab
, u
"=$B$3"_ustr
); // A32
7365 m_pDoc
->SetString(1, 31, nSrcTab
, u
"=$C$3"_ustr
); // B32
7366 m_pDoc
->SetString(2, 31, nSrcTab
, u
"=$D$3"_ustr
); // C32
7368 m_pDoc
->SetString(0, 40, nSrcTab
, u
"=Range_B2"_ustr
); // A41
7369 m_pDoc
->SetString(1, 40, nSrcTab
, u
"=Range_C2"_ustr
); // B41
7370 m_pDoc
->SetString(2, 40, nSrcTab
, u
"=Range_D2"_ustr
); // C41
7371 m_pDoc
->SetString(0, 41, nSrcTab
, u
"=Range_B3"_ustr
); // A42
7372 m_pDoc
->SetString(1, 41, nSrcTab
, u
"=Range_C3"_ustr
); // B42
7373 m_pDoc
->SetString(2, 41, nSrcTab
, u
"=Range_D3"_ustr
); // C42
7375 m_pDoc
->SetString(0, 50, nSrcTab
, u
"=RelRange_Cm20_R0"_ustr
); // A51
7376 m_pDoc
->SetString(1, 50, nSrcTab
, u
"=RelRange_Cm20_R0"_ustr
); // B51
7377 m_pDoc
->SetString(2, 50, nSrcTab
, u
"=RelRange_Cm20_R0"_ustr
); // C51
7378 m_pDoc
->SetString(0, 51, nSrcTab
, u
"=RelRange_Cm20_R0"_ustr
); // A52
7379 m_pDoc
->SetString(1, 51, nSrcTab
, u
"=RelRange_Cm20_R0"_ustr
); // B52
7380 m_pDoc
->SetString(2, 51, nSrcTab
, u
"=RelRange_Cm20_R0"_ustr
); // C52
7382 m_pDoc
->SetString(0, 60, nSrcTab
, u
"=SUM(B2:D2)"_ustr
); // A61
7383 m_pDoc
->SetString(1, 60, nSrcTab
, u
"=SUM(B2:D2)"_ustr
); // B61
7384 m_pDoc
->SetString(2, 60, nSrcTab
, u
"=SUM(B2:D2)"_ustr
); // C61
7385 m_pDoc
->SetString(0, 61, nSrcTab
, u
"=SUM(B3:D3)"_ustr
); // A62
7386 m_pDoc
->SetString(1, 61, nSrcTab
, u
"=SUM(B3:D3)"_ustr
); // B62
7387 m_pDoc
->SetString(2, 61, nSrcTab
, u
"=SUM(B3:D3)"_ustr
); // C62
7389 m_pDoc
->SetString(0, 70, nSrcTab
, u
"=SUM($B$2:$D$2)"_ustr
); // A71
7390 m_pDoc
->SetString(1, 70, nSrcTab
, u
"=SUM($B$2:$D$2)"_ustr
); // B71
7391 m_pDoc
->SetString(2, 70, nSrcTab
, u
"=SUM($B$2:$D$2)"_ustr
); // C71
7392 m_pDoc
->SetString(0, 71, nSrcTab
, u
"=SUM($B$3:$D$3)"_ustr
); // A72
7393 m_pDoc
->SetString(1, 71, nSrcTab
, u
"=SUM($B$3:$D$3)"_ustr
); // B72
7394 m_pDoc
->SetString(2, 71, nSrcTab
, u
"=SUM($B$3:$D$3)"_ustr
); // C72
7396 m_pDoc
->SetString(0, 80, nSrcTab
, u
"=SUM(Range_B2_D2)"_ustr
); // A81
7397 m_pDoc
->SetString(1, 80, nSrcTab
, u
"=SUM(Range_B2_D2)"_ustr
); // B81
7398 m_pDoc
->SetString(2, 80, nSrcTab
, u
"=SUM(Range_B2_D2)"_ustr
); // C81
7399 m_pDoc
->SetString(0, 81, nSrcTab
, u
"=SUM(Range_B3_D3)"_ustr
); // A82
7400 m_pDoc
->SetString(1, 81, nSrcTab
, u
"=SUM(Range_B3_D3)"_ustr
); // B82
7401 m_pDoc
->SetString(2, 81, nSrcTab
, u
"=SUM(Range_B3_D3)"_ustr
); // C82
7403 m_pDoc
->SetString(0, 90, nSrcTab
, u
"=SUM($B$2:$D$3)"_ustr
); // A91
7404 m_pDoc
->SetString(1, 90, nSrcTab
, u
"=SUM($B$2:$D$3)"_ustr
); // B91
7405 m_pDoc
->SetString(2, 90, nSrcTab
, u
"=SUM($B$2:$D$3)"_ustr
); // C91
7406 m_pDoc
->SetString(0, 91, nSrcTab
, u
"=SUM($B$2:$D$3)"_ustr
); // A92
7407 m_pDoc
->SetString(1, 91, nSrcTab
, u
"=SUM($B$2:$D$3)"_ustr
); // B92
7408 m_pDoc
->SetString(2, 91, nSrcTab
, u
"=SUM($B$2:$D$3)"_ustr
); // C92
7410 m_pDoc
->SetString(0, 100, nSrcTab
, u
"=SUM(Range_B2_D3)"_ustr
); // A101
7411 m_pDoc
->SetString(1, 100, nSrcTab
, u
"=SUM(Range_B2_D3)"_ustr
); // B101
7412 m_pDoc
->SetString(2, 100, nSrcTab
, u
"=SUM(Range_B2_D3)"_ustr
); // C101
7413 m_pDoc
->SetString(0, 101, nSrcTab
, u
"=SUM(Range_B2_D3)"_ustr
); // A102
7414 m_pDoc
->SetString(1, 101, nSrcTab
, u
"=SUM(Range_B2_D3)"_ustr
); // B102
7415 m_pDoc
->SetString(2, 101, nSrcTab
, u
"=SUM(Range_B2_D3)"_ustr
); // C102
7417 // Check precondition
7418 checkReferencedCutRangesRowIntitial(nSrcTab
, u
"Initial"_ustr
);
7420 // Cut values B2:D2 to the clip document.
7421 ScDocument
aClipDoc(SCDOCMODE_CLIP
);
7422 ScRange
aSrcRange(1, 1, nSrcTab
, 3, 1, nSrcTab
);
7423 ScMarkData
aSrcMark(m_pDoc
->GetSheetLimits());
7424 aSrcMark
.SetMarkArea(aSrcRange
);
7426 pUndoCut
.reset(cutToClip(*m_xDocShell
, aSrcRange
, &aClipDoc
, bUndo
));
7428 for (int i
= nSrcTab
+ 1; i
< nDestTab
; ++i
)
7429 m_pDoc
->InsertTab(i
, "Empty Tab " + OUString::number(i
));
7431 if (nSrcTab
< nDestTab
)
7432 m_pDoc
->InsertTab(nDestTab
, u
"Dest"_ustr
);
7433 else if (nSrcTab
> nDestTab
)
7434 m_pDoc
->RenameTab(nDestTab
, u
"Dest"_ustr
);
7436 int nTabCount
= m_pDoc
->GetTableCount();
7437 for (int i
= nTabCount
; i
< nTabCount
+ 2; ++i
)
7438 m_pDoc
->InsertTab(i
, "Empty Tab " + OUString::number(i
));
7439 nTabCount
= m_pDoc
->GetTableCount();
7441 InsertDeleteFlags
aFlags(InsertDeleteFlags::ALL
);
7443 ScDocumentUniquePtr pPasteUndoDoc
;
7444 std::unique_ptr
<ScDocument
> pPasteRefUndoDoc
;
7445 std::unique_ptr
<ScRefUndoData
> pUndoData
;
7448 ScMarkData
aDestMark(m_pDoc
->GetSheetLimits());
7453 aDestRange
= ScRange(2, 11, nDestTab
, 2, 13, nDestTab
);
7454 aDestMark
.SetMarkArea(aDestRange
);
7457 prepareUndoBeforePaste(true, pPasteUndoDoc
, pPasteRefUndoDoc
, aDestMark
, aDestRange
,
7461 ScDocument
* pOrigClipDoc
= &aClipDoc
;
7462 ScDocumentUniquePtr
pTransClip(new ScDocument(SCDOCMODE_CLIP
));
7463 aClipDoc
.TransposeClip(pTransClip
.get(), aFlags
, false, true);
7465 m_pDoc
->CopyFromClip(aDestRange
, aDestMark
, aFlags
, pPasteRefUndoDoc
.get(),
7466 pTransClip
.get(), true, false, true, false);
7467 printValuesAndFormulasInRange(m_pDoc
, ScRange(0, 20, nSrcTab
, 2, 21, nSrcTab
),
7468 "Relative references after copy"_ostr
);
7470 m_pDoc
->UpdateTranspose(aDestRange
.aStart
, pOrigClipDoc
, aDestMark
, pPasteRefUndoDoc
.get());
7471 printValuesAndFormulasInRange(m_pDoc
, ScRange(0, 20, nSrcTab
, 2, 21, nSrcTab
),
7472 "Relative references after UpdateTranspose"_ostr
);
7478 aDestRange
= ScRange(2, 11, nDestTab
, 4, 11, nDestTab
);
7480 aDestMark
.SetMarkArea(aDestRange
);
7483 prepareUndoBeforePaste(true, pPasteUndoDoc
, pPasteRefUndoDoc
, aDestMark
, aDestRange
,
7486 m_pDoc
->CopyFromClip(aDestRange
, aDestMark
, aFlags
, pPasteRefUndoDoc
.get(), &aClipDoc
, true,
7487 false, false, false);
7491 prepareUndoAfterPaste(pPasteUndoDoc
, pPasteRefUndoDoc
, aDestMark
, aDestRange
, pUndoData
,
7492 pUndoPaste
, bTransposed
);
7495 void TestCopyPaste::checkReferencedCutRangesRow(const SCTAB nSrcTab
, const SCTAB nDestTab
)
7497 // Cut B2:D2 and pasted to C12:E12
7499 OUString
aFBase(u
"="_ustr
);
7500 if (nSrcTab
!= nDestTab
)
7504 CPPUNIT_ASSERT_EQUAL(01.0, m_pDoc
->GetValue(2, 11, nDestTab
));
7505 CPPUNIT_ASSERT_EQUAL(11.0, m_pDoc
->GetValue(3, 11, nDestTab
));
7506 CPPUNIT_ASSERT_EQUAL(21.0, m_pDoc
->GetValue(4, 11, nDestTab
));
7507 CPPUNIT_ASSERT_EQUAL(02.0, m_pDoc
->GetValue(1, 2, nSrcTab
));
7508 CPPUNIT_ASSERT_EQUAL(12.0, m_pDoc
->GetValue(2, 2, nSrcTab
));
7509 CPPUNIT_ASSERT_EQUAL(22.0, m_pDoc
->GetValue(3, 2, nSrcTab
));
7512 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(0, 0, nSrcTab
)); // A1
7513 CPPUNIT_ASSERT_EQUAL(1001.0, m_pDoc
->GetValue(1, 0, nSrcTab
)); // B1
7514 CPPUNIT_ASSERT_EQUAL(1002.0, m_pDoc
->GetValue(2, 0, nSrcTab
)); // C1
7515 CPPUNIT_ASSERT_EQUAL(1003.0, m_pDoc
->GetValue(3, 0, nSrcTab
)); // D1
7516 CPPUNIT_ASSERT_EQUAL(1004.0, m_pDoc
->GetValue(4, 0, nSrcTab
)); // E1
7517 CPPUNIT_ASSERT_EQUAL(1010.0, m_pDoc
->GetValue(0, 1, nSrcTab
)); // A2
7518 CPPUNIT_ASSERT_EQUAL(1014.0, m_pDoc
->GetValue(4, 1, nSrcTab
)); // E2
7519 CPPUNIT_ASSERT_EQUAL(1020.0, m_pDoc
->GetValue(0, 2, nSrcTab
)); // A3
7520 CPPUNIT_ASSERT_EQUAL(1024.0, m_pDoc
->GetValue(4, 2, nSrcTab
)); // E3
7521 CPPUNIT_ASSERT_EQUAL(1030.0, m_pDoc
->GetValue(0, 3, nSrcTab
)); // A4
7522 CPPUNIT_ASSERT_EQUAL(1031.0, m_pDoc
->GetValue(1, 3, nSrcTab
)); // B4
7523 CPPUNIT_ASSERT_EQUAL(1032.0, m_pDoc
->GetValue(2, 3, nSrcTab
)); // C4
7524 CPPUNIT_ASSERT_EQUAL(1033.0, m_pDoc
->GetValue(3, 3, nSrcTab
)); // D4
7525 CPPUNIT_ASSERT_EQUAL(1034.0, m_pDoc
->GetValue(4, 3, nSrcTab
)); // E4
7526 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(20, 0, nSrcTab
)); // U1
7527 CPPUNIT_ASSERT_EQUAL(1001.0, m_pDoc
->GetValue(21, 0, nSrcTab
)); // V1
7528 CPPUNIT_ASSERT_EQUAL(1002.0, m_pDoc
->GetValue(22, 0, nSrcTab
)); // W1
7529 CPPUNIT_ASSERT_EQUAL(1003.0, m_pDoc
->GetValue(23, 0, nSrcTab
)); // X1
7530 CPPUNIT_ASSERT_EQUAL(1004.0, m_pDoc
->GetValue(24, 0, nSrcTab
)); // Y1
7531 CPPUNIT_ASSERT_EQUAL(1010.0, m_pDoc
->GetValue(20, 1, nSrcTab
)); // U2
7532 CPPUNIT_ASSERT_EQUAL(1014.0, m_pDoc
->GetValue(24, 1, nSrcTab
)); // Y2
7533 CPPUNIT_ASSERT_EQUAL(1020.0, m_pDoc
->GetValue(20, 2, nSrcTab
)); // U3
7534 CPPUNIT_ASSERT_EQUAL(1024.0, m_pDoc
->GetValue(24, 2, nSrcTab
)); // Y3
7535 CPPUNIT_ASSERT_EQUAL(1030.0, m_pDoc
->GetValue(20, 3, nSrcTab
)); // U4
7536 CPPUNIT_ASSERT_EQUAL(1031.0, m_pDoc
->GetValue(21, 3, nSrcTab
)); // B4
7537 CPPUNIT_ASSERT_EQUAL(1032.0, m_pDoc
->GetValue(22, 3, nSrcTab
)); // W4
7538 CPPUNIT_ASSERT_EQUAL(1033.0, m_pDoc
->GetValue(23, 3, nSrcTab
)); // X4
7539 CPPUNIT_ASSERT_EQUAL(1034.0, m_pDoc
->GetValue(24, 3, nSrcTab
)); // Y4
7540 CPPUNIT_ASSERT_EQUAL(u
"=A1"_ustr
, m_pDoc
->GetFormula(20, 0, nSrcTab
)); // U1
7541 CPPUNIT_ASSERT_EQUAL(u
"=B1"_ustr
, m_pDoc
->GetFormula(21, 0, nSrcTab
)); // V1
7542 CPPUNIT_ASSERT_EQUAL(u
"=C1"_ustr
, m_pDoc
->GetFormula(22, 0, nSrcTab
)); // W1
7543 CPPUNIT_ASSERT_EQUAL(u
"=D1"_ustr
, m_pDoc
->GetFormula(23, 0, nSrcTab
)); // X1
7544 CPPUNIT_ASSERT_EQUAL(u
"=E1"_ustr
, m_pDoc
->GetFormula(24, 0, nSrcTab
)); // Y1
7545 CPPUNIT_ASSERT_EQUAL(u
"=A2"_ustr
, m_pDoc
->GetFormula(20, 1, nSrcTab
)); // U2
7546 CPPUNIT_ASSERT_EQUAL(u
"=E2"_ustr
, m_pDoc
->GetFormula(24, 1, nSrcTab
)); // Y2
7547 CPPUNIT_ASSERT_EQUAL(u
"=A3"_ustr
, m_pDoc
->GetFormula(20, 2, nSrcTab
)); // U3
7548 CPPUNIT_ASSERT_EQUAL(u
"=E3"_ustr
, m_pDoc
->GetFormula(24, 2, nSrcTab
)); // Y3
7549 CPPUNIT_ASSERT_EQUAL(u
"=A4"_ustr
, m_pDoc
->GetFormula(20, 3, nSrcTab
)); // U4
7550 CPPUNIT_ASSERT_EQUAL(u
"=B4"_ustr
, m_pDoc
->GetFormula(21, 3, nSrcTab
)); // B4
7551 CPPUNIT_ASSERT_EQUAL(u
"=C4"_ustr
, m_pDoc
->GetFormula(22, 3, nSrcTab
)); // W4
7552 CPPUNIT_ASSERT_EQUAL(u
"=D4"_ustr
, m_pDoc
->GetFormula(23, 3, nSrcTab
)); // X4
7553 CPPUNIT_ASSERT_EQUAL(u
"=E4"_ustr
, m_pDoc
->GetFormula(24, 3, nSrcTab
)); // Y4
7555 // Note: Values (mostly) remain the same
7557 CPPUNIT_ASSERT_EQUAL(OUString(aFBase
+ "C12"), m_pDoc
->GetFormula(0, 20, nSrcTab
)); // A21
7558 CPPUNIT_ASSERT_EQUAL(OUString(aFBase
+ "D12"), m_pDoc
->GetFormula(1, 20, nSrcTab
)); // B21
7559 CPPUNIT_ASSERT_EQUAL(OUString(aFBase
+ "E12"), m_pDoc
->GetFormula(2, 20, nSrcTab
)); // C21
7560 CPPUNIT_ASSERT_EQUAL(u
"=B3"_ustr
, m_pDoc
->GetFormula(0, 21, nSrcTab
)); // A22
7561 CPPUNIT_ASSERT_EQUAL(u
"=C3"_ustr
, m_pDoc
->GetFormula(1, 21, nSrcTab
)); // B22
7562 CPPUNIT_ASSERT_EQUAL(u
"=D3"_ustr
, m_pDoc
->GetFormula(2, 21, nSrcTab
)); // C22
7563 CPPUNIT_ASSERT_EQUAL(01.0, m_pDoc
->GetValue(0, 20, nSrcTab
));
7564 CPPUNIT_ASSERT_EQUAL(11.0, m_pDoc
->GetValue(1, 20, nSrcTab
));
7565 CPPUNIT_ASSERT_EQUAL(21.0, m_pDoc
->GetValue(2, 20, nSrcTab
));
7566 CPPUNIT_ASSERT_EQUAL(02.0, m_pDoc
->GetValue(0, 21, nSrcTab
));
7567 CPPUNIT_ASSERT_EQUAL(12.0, m_pDoc
->GetValue(1, 21, nSrcTab
));
7568 CPPUNIT_ASSERT_EQUAL(22.0, m_pDoc
->GetValue(2, 21, nSrcTab
));
7570 CPPUNIT_ASSERT_EQUAL(OUString(aFBase
+ "$C$12"), m_pDoc
->GetFormula(0, 30, nSrcTab
)); // A31
7571 CPPUNIT_ASSERT_EQUAL(OUString(aFBase
+ "$D$12"), m_pDoc
->GetFormula(1, 30, nSrcTab
)); // B31
7572 CPPUNIT_ASSERT_EQUAL(OUString(aFBase
+ "$E$12"), m_pDoc
->GetFormula(2, 30, nSrcTab
)); // C31
7573 CPPUNIT_ASSERT_EQUAL(u
"=$B$3"_ustr
, m_pDoc
->GetFormula(0, 31, nSrcTab
)); // A32
7574 CPPUNIT_ASSERT_EQUAL(u
"=$C$3"_ustr
, m_pDoc
->GetFormula(1, 31, nSrcTab
)); // B32
7575 CPPUNIT_ASSERT_EQUAL(u
"=$D$3"_ustr
, m_pDoc
->GetFormula(2, 31, nSrcTab
)); // C32
7576 CPPUNIT_ASSERT_EQUAL(01.0, m_pDoc
->GetValue(0, 30, nSrcTab
));
7577 CPPUNIT_ASSERT_EQUAL(11.0, m_pDoc
->GetValue(1, 30, nSrcTab
));
7578 CPPUNIT_ASSERT_EQUAL(21.0, m_pDoc
->GetValue(2, 30, nSrcTab
));
7579 CPPUNIT_ASSERT_EQUAL(02.0, m_pDoc
->GetValue(0, 31, nSrcTab
));
7580 CPPUNIT_ASSERT_EQUAL(12.0, m_pDoc
->GetValue(1, 31, nSrcTab
));
7581 CPPUNIT_ASSERT_EQUAL(22.0, m_pDoc
->GetValue(2, 31, nSrcTab
));
7583 CPPUNIT_ASSERT_EQUAL(nSrcTab
!= nDestTab
? u
"$Dest.$C$12"_ustr
: u
"$Test.$C$12"_ustr
,
7584 getRangeByName(u
"Range_B2"_ustr
));
7585 CPPUNIT_ASSERT_EQUAL(nSrcTab
!= nDestTab
? u
"$Dest.$D$12"_ustr
: u
"$Test.$D$12"_ustr
,
7586 getRangeByName(u
"Range_C2"_ustr
));
7587 CPPUNIT_ASSERT_EQUAL(nSrcTab
!= nDestTab
? u
"$Dest.$E$12"_ustr
: u
"$Test.$E$12"_ustr
,
7588 getRangeByName(u
"Range_D2"_ustr
));
7589 CPPUNIT_ASSERT_EQUAL(u
"$Test.$B$3"_ustr
, getRangeByName(u
"Range_B3"_ustr
)); // no change
7590 CPPUNIT_ASSERT_EQUAL(u
"$Test.$C$3"_ustr
, getRangeByName(u
"Range_C3"_ustr
)); // no change
7591 CPPUNIT_ASSERT_EQUAL(u
"$Test.$D$3"_ustr
, getRangeByName(u
"Range_D3"_ustr
)); // no change
7592 CPPUNIT_ASSERT_EQUAL(nSrcTab
!= nDestTab
? u
"$Dest.$C$12:$E$12"_ustr
7593 : u
"$Test.$C$12:$E$12"_ustr
,
7594 getRangeByName(u
"Range_B2_D2"_ustr
));
7595 CPPUNIT_ASSERT_EQUAL(u
"$Test.$B$3:$D$3"_ustr
, getRangeByName(u
"Range_B3_D3"_ustr
)); // no change
7596 CPPUNIT_ASSERT_EQUAL(u
"$Test.$B$2:$D$3"_ustr
, getRangeByName(u
"Range_B2_D3"_ustr
)); // no change
7597 CPPUNIT_ASSERT_EQUAL(u
"B2"_ustr
, getRangeByName(u
"RelRange_Cm20_R0"_ustr
)); // no change
7599 CPPUNIT_ASSERT_EQUAL(u
"=Range_B2"_ustr
, m_pDoc
->GetFormula(0, 40, nSrcTab
)); // A41
7600 CPPUNIT_ASSERT_EQUAL(u
"=Range_C2"_ustr
, m_pDoc
->GetFormula(1, 40, nSrcTab
)); // B41
7601 CPPUNIT_ASSERT_EQUAL(u
"=Range_D2"_ustr
, m_pDoc
->GetFormula(2, 40, nSrcTab
)); // C41
7602 CPPUNIT_ASSERT_EQUAL(u
"=Range_B3"_ustr
, m_pDoc
->GetFormula(0, 41, nSrcTab
)); // A42
7603 CPPUNIT_ASSERT_EQUAL(u
"=Range_C3"_ustr
, m_pDoc
->GetFormula(1, 41, nSrcTab
)); // B42
7604 CPPUNIT_ASSERT_EQUAL(u
"=Range_D3"_ustr
, m_pDoc
->GetFormula(2, 41, nSrcTab
)); // C42
7605 CPPUNIT_ASSERT_EQUAL(01.0, m_pDoc
->GetValue(0, 40, nSrcTab
));
7606 CPPUNIT_ASSERT_EQUAL(11.0, m_pDoc
->GetValue(1, 40, nSrcTab
));
7607 CPPUNIT_ASSERT_EQUAL(21.0, m_pDoc
->GetValue(2, 40, nSrcTab
));
7608 CPPUNIT_ASSERT_EQUAL(02.0, m_pDoc
->GetValue(0, 41, nSrcTab
));
7609 CPPUNIT_ASSERT_EQUAL(12.0, m_pDoc
->GetValue(1, 41, nSrcTab
));
7610 CPPUNIT_ASSERT_EQUAL(22.0, m_pDoc
->GetValue(2, 41, nSrcTab
));
7612 CPPUNIT_ASSERT_EQUAL(u
"=RelRange_Cm20_R0"_ustr
, m_pDoc
->GetFormula(0, 50, nSrcTab
)); // A51
7613 CPPUNIT_ASSERT_EQUAL(u
"=RelRange_Cm20_R0"_ustr
, m_pDoc
->GetFormula(1, 50, nSrcTab
)); // B51
7614 CPPUNIT_ASSERT_EQUAL(u
"=RelRange_Cm20_R0"_ustr
, m_pDoc
->GetFormula(2, 50, nSrcTab
)); // C51
7615 CPPUNIT_ASSERT_EQUAL(u
"=RelRange_Cm20_R0"_ustr
, m_pDoc
->GetFormula(0, 51, nSrcTab
)); // A52
7616 CPPUNIT_ASSERT_EQUAL(u
"=RelRange_Cm20_R0"_ustr
, m_pDoc
->GetFormula(1, 51, nSrcTab
)); // B52
7617 CPPUNIT_ASSERT_EQUAL(u
"=RelRange_Cm20_R0"_ustr
, m_pDoc
->GetFormula(2, 51, nSrcTab
)); // C52
7618 CPPUNIT_ASSERT_EQUAL(01.0, m_pDoc
->GetValue(0, 50, nSrcTab
));
7619 CPPUNIT_ASSERT_EQUAL(11.0, m_pDoc
->GetValue(1, 50, nSrcTab
));
7620 CPPUNIT_ASSERT_EQUAL(21.0, m_pDoc
->GetValue(2, 50, nSrcTab
));
7621 CPPUNIT_ASSERT_EQUAL(02.0, m_pDoc
->GetValue(0, 51, nSrcTab
));
7622 CPPUNIT_ASSERT_EQUAL(12.0, m_pDoc
->GetValue(1, 51, nSrcTab
));
7623 CPPUNIT_ASSERT_EQUAL(22.0, m_pDoc
->GetValue(2, 51, nSrcTab
));
7625 CPPUNIT_ASSERT_EQUAL(nSrcTab
!= nDestTab
? u
"=SUM(Dest.C12:E12)"_ustr
: u
"=SUM(C12:E12)"_ustr
,
7626 m_pDoc
->GetFormula(0, 60, nSrcTab
)); // A61
7627 CPPUNIT_ASSERT_EQUAL(nSrcTab
!= nDestTab
? u
"=SUM(Dest.C12:E12)"_ustr
: u
"=SUM(C12:E12)"_ustr
,
7628 m_pDoc
->GetFormula(1, 60, nSrcTab
)); // B61
7629 CPPUNIT_ASSERT_EQUAL(nSrcTab
!= nDestTab
? u
"=SUM(Dest.C12:E12)"_ustr
: u
"=SUM(C12:E12)"_ustr
,
7630 m_pDoc
->GetFormula(2, 60, nSrcTab
)); // C61
7631 CPPUNIT_ASSERT_EQUAL(u
"=SUM(B3:D3)"_ustr
, m_pDoc
->GetFormula(0, 61, nSrcTab
)); // A62
7632 CPPUNIT_ASSERT_EQUAL(u
"=SUM(B3:D3)"_ustr
, m_pDoc
->GetFormula(1, 61, nSrcTab
)); // B62
7633 CPPUNIT_ASSERT_EQUAL(u
"=SUM(B3:D3)"_ustr
, m_pDoc
->GetFormula(2, 61, nSrcTab
)); // C62
7634 CPPUNIT_ASSERT_EQUAL(33.0, m_pDoc
->GetValue(0, 60, nSrcTab
));
7635 CPPUNIT_ASSERT_EQUAL(33.0, m_pDoc
->GetValue(1, 60, nSrcTab
));
7636 CPPUNIT_ASSERT_EQUAL(33.0, m_pDoc
->GetValue(2, 60, nSrcTab
));
7637 CPPUNIT_ASSERT_EQUAL(36.0, m_pDoc
->GetValue(0, 61, nSrcTab
));
7638 CPPUNIT_ASSERT_EQUAL(36.0, m_pDoc
->GetValue(1, 61, nSrcTab
));
7639 CPPUNIT_ASSERT_EQUAL(36.0, m_pDoc
->GetValue(2, 61, nSrcTab
));
7641 CPPUNIT_ASSERT_EQUAL(nSrcTab
!= nDestTab
? u
"=SUM(Dest.$C$12:$E$12)"_ustr
7642 : u
"=SUM($C$12:$E$12)"_ustr
,
7643 m_pDoc
->GetFormula(0, 70, nSrcTab
)); // A71
7644 CPPUNIT_ASSERT_EQUAL(nSrcTab
!= nDestTab
? u
"=SUM(Dest.$C$12:$E$12)"_ustr
7645 : u
"=SUM($C$12:$E$12)"_ustr
,
7646 m_pDoc
->GetFormula(1, 70, nSrcTab
)); // B71
7647 CPPUNIT_ASSERT_EQUAL(nSrcTab
!= nDestTab
? u
"=SUM(Dest.$C$12:$E$12)"_ustr
7648 : u
"=SUM($C$12:$E$12)"_ustr
,
7649 m_pDoc
->GetFormula(2, 70, nSrcTab
)); // C71
7650 CPPUNIT_ASSERT_EQUAL(u
"=SUM($B$3:$D$3)"_ustr
, m_pDoc
->GetFormula(0, 71, nSrcTab
)); // A72
7651 CPPUNIT_ASSERT_EQUAL(u
"=SUM($B$3:$D$3)"_ustr
, m_pDoc
->GetFormula(1, 71, nSrcTab
)); // B72
7652 CPPUNIT_ASSERT_EQUAL(u
"=SUM($B$3:$D$3)"_ustr
, m_pDoc
->GetFormula(2, 71, nSrcTab
)); // C72
7653 CPPUNIT_ASSERT_EQUAL(33.0, m_pDoc
->GetValue(0, 70, nSrcTab
));
7654 CPPUNIT_ASSERT_EQUAL(33.0, m_pDoc
->GetValue(1, 70, nSrcTab
));
7655 CPPUNIT_ASSERT_EQUAL(33.0, m_pDoc
->GetValue(2, 70, nSrcTab
));
7656 CPPUNIT_ASSERT_EQUAL(36.0, m_pDoc
->GetValue(0, 71, nSrcTab
));
7657 CPPUNIT_ASSERT_EQUAL(36.0, m_pDoc
->GetValue(1, 71, nSrcTab
));
7658 CPPUNIT_ASSERT_EQUAL(36.0, m_pDoc
->GetValue(2, 71, nSrcTab
));
7660 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_B2_D2)"_ustr
, m_pDoc
->GetFormula(0, 80, nSrcTab
)); // A81
7661 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_B2_D2)"_ustr
, m_pDoc
->GetFormula(1, 80, nSrcTab
)); // B81
7662 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_B2_D2)"_ustr
, m_pDoc
->GetFormula(2, 80, nSrcTab
)); // C81
7663 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_B3_D3)"_ustr
, m_pDoc
->GetFormula(0, 81, nSrcTab
)); // A82
7664 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_B3_D3)"_ustr
, m_pDoc
->GetFormula(1, 81, nSrcTab
)); // B82
7665 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_B3_D3)"_ustr
, m_pDoc
->GetFormula(2, 81, nSrcTab
)); // C82
7666 CPPUNIT_ASSERT_EQUAL(33.0, m_pDoc
->GetValue(0, 80, nSrcTab
));
7667 CPPUNIT_ASSERT_EQUAL(33.0, m_pDoc
->GetValue(1, 80, nSrcTab
));
7668 CPPUNIT_ASSERT_EQUAL(33.0, m_pDoc
->GetValue(2, 80, nSrcTab
));
7669 CPPUNIT_ASSERT_EQUAL(36.0, m_pDoc
->GetValue(0, 81, nSrcTab
));
7670 CPPUNIT_ASSERT_EQUAL(36.0, m_pDoc
->GetValue(1, 81, nSrcTab
));
7671 CPPUNIT_ASSERT_EQUAL(36.0, m_pDoc
->GetValue(2, 81, nSrcTab
));
7673 // no change in formula after cut
7674 CPPUNIT_ASSERT_EQUAL(u
"=SUM($B$2:$D$3)"_ustr
, m_pDoc
->GetFormula(0, 90, nSrcTab
)); // A91
7675 CPPUNIT_ASSERT_EQUAL(u
"=SUM($B$2:$D$3)"_ustr
, m_pDoc
->GetFormula(1, 90, nSrcTab
)); // B91
7676 CPPUNIT_ASSERT_EQUAL(u
"=SUM($B$2:$D$3)"_ustr
, m_pDoc
->GetFormula(2, 90, nSrcTab
)); // C91
7677 CPPUNIT_ASSERT_EQUAL(u
"=SUM($B$2:$D$3)"_ustr
, m_pDoc
->GetFormula(0, 91, nSrcTab
)); // A92
7678 CPPUNIT_ASSERT_EQUAL(u
"=SUM($B$2:$D$3)"_ustr
, m_pDoc
->GetFormula(1, 91, nSrcTab
)); // B92
7679 CPPUNIT_ASSERT_EQUAL(u
"=SUM($B$2:$D$3)"_ustr
, m_pDoc
->GetFormula(2, 91, nSrcTab
)); // C92
7680 CPPUNIT_ASSERT_EQUAL(36.0, m_pDoc
->GetValue(0, 90, nSrcTab
)); // only 2nd row
7681 CPPUNIT_ASSERT_EQUAL(36.0, m_pDoc
->GetValue(1, 90, nSrcTab
)); // only 2nd row
7682 CPPUNIT_ASSERT_EQUAL(36.0, m_pDoc
->GetValue(2, 90, nSrcTab
)); // only 2nd row
7683 CPPUNIT_ASSERT_EQUAL(36.0, m_pDoc
->GetValue(0, 91, nSrcTab
)); // only 2nd row
7684 CPPUNIT_ASSERT_EQUAL(36.0, m_pDoc
->GetValue(1, 91, nSrcTab
)); // only 2nd row
7685 CPPUNIT_ASSERT_EQUAL(36.0, m_pDoc
->GetValue(2, 91, nSrcTab
)); // only 2nd row
7687 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_B2_D3)"_ustr
, m_pDoc
->GetFormula(0, 100, nSrcTab
)); // A101
7688 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_B2_D3)"_ustr
, m_pDoc
->GetFormula(1, 100, nSrcTab
)); // B101
7689 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_B2_D3)"_ustr
, m_pDoc
->GetFormula(2, 100, nSrcTab
)); // C101
7690 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_B2_D3)"_ustr
, m_pDoc
->GetFormula(0, 101, nSrcTab
)); // A102
7691 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_B2_D3)"_ustr
, m_pDoc
->GetFormula(1, 101, nSrcTab
)); // B102
7692 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_B2_D3)"_ustr
, m_pDoc
->GetFormula(2, 101, nSrcTab
)); // C102
7693 CPPUNIT_ASSERT_EQUAL(36.0, m_pDoc
->GetValue(0, 100, nSrcTab
)); // only 2nd row
7694 CPPUNIT_ASSERT_EQUAL(36.0, m_pDoc
->GetValue(1, 100, nSrcTab
)); // only 2nd row
7695 CPPUNIT_ASSERT_EQUAL(36.0, m_pDoc
->GetValue(2, 100, nSrcTab
)); // only 2nd row
7696 CPPUNIT_ASSERT_EQUAL(36.0, m_pDoc
->GetValue(0, 101, nSrcTab
)); // only 2nd row
7697 CPPUNIT_ASSERT_EQUAL(36.0, m_pDoc
->GetValue(1, 101, nSrcTab
)); // only 2nd row
7698 CPPUNIT_ASSERT_EQUAL(36.0, m_pDoc
->GetValue(2, 101, nSrcTab
)); // only 2nd row
7701 void TestCopyPaste::checkReferencedCutTransposedRangesRow(const SCTAB nSrcTab
, const SCTAB nDestTab
)
7703 // Cut B2:D2 and pasted transposed to C12:C14
7705 OUString
aFBase(u
"="_ustr
);
7706 if (nSrcTab
!= nDestTab
)
7710 CPPUNIT_ASSERT_EQUAL(01.0, m_pDoc
->GetValue(2, 11, nDestTab
));
7711 CPPUNIT_ASSERT_EQUAL(11.0, m_pDoc
->GetValue(2, 12, nDestTab
));
7712 CPPUNIT_ASSERT_EQUAL(21.0, m_pDoc
->GetValue(2, 13, nDestTab
));
7713 CPPUNIT_ASSERT_EQUAL(02.0, m_pDoc
->GetValue(1, 2, nSrcTab
));
7714 CPPUNIT_ASSERT_EQUAL(12.0, m_pDoc
->GetValue(2, 2, nSrcTab
));
7715 CPPUNIT_ASSERT_EQUAL(22.0, m_pDoc
->GetValue(3, 2, nSrcTab
));
7718 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(0, 0, nSrcTab
)); // A1
7719 CPPUNIT_ASSERT_EQUAL(1001.0, m_pDoc
->GetValue(1, 0, nSrcTab
)); // B1
7720 CPPUNIT_ASSERT_EQUAL(1002.0, m_pDoc
->GetValue(2, 0, nSrcTab
)); // C1
7721 CPPUNIT_ASSERT_EQUAL(1003.0, m_pDoc
->GetValue(3, 0, nSrcTab
)); // D1
7722 CPPUNIT_ASSERT_EQUAL(1004.0, m_pDoc
->GetValue(4, 0, nSrcTab
)); // E1
7723 CPPUNIT_ASSERT_EQUAL(1010.0, m_pDoc
->GetValue(0, 1, nSrcTab
)); // A2
7724 CPPUNIT_ASSERT_EQUAL(1014.0, m_pDoc
->GetValue(4, 1, nSrcTab
)); // E2
7725 CPPUNIT_ASSERT_EQUAL(1020.0, m_pDoc
->GetValue(0, 2, nSrcTab
)); // A3
7726 CPPUNIT_ASSERT_EQUAL(1024.0, m_pDoc
->GetValue(4, 2, nSrcTab
)); // E3
7727 CPPUNIT_ASSERT_EQUAL(1030.0, m_pDoc
->GetValue(0, 3, nSrcTab
)); // A4
7728 CPPUNIT_ASSERT_EQUAL(1031.0, m_pDoc
->GetValue(1, 3, nSrcTab
)); // B4
7729 CPPUNIT_ASSERT_EQUAL(1032.0, m_pDoc
->GetValue(2, 3, nSrcTab
)); // C4
7730 CPPUNIT_ASSERT_EQUAL(1033.0, m_pDoc
->GetValue(3, 3, nSrcTab
)); // D4
7731 CPPUNIT_ASSERT_EQUAL(1034.0, m_pDoc
->GetValue(4, 3, nSrcTab
)); // E4
7732 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(20, 0, nSrcTab
)); // U1
7733 CPPUNIT_ASSERT_EQUAL(1001.0, m_pDoc
->GetValue(21, 0, nSrcTab
)); // V1
7734 CPPUNIT_ASSERT_EQUAL(1002.0, m_pDoc
->GetValue(22, 0, nSrcTab
)); // W1
7735 CPPUNIT_ASSERT_EQUAL(1003.0, m_pDoc
->GetValue(23, 0, nSrcTab
)); // X1
7736 CPPUNIT_ASSERT_EQUAL(1004.0, m_pDoc
->GetValue(24, 0, nSrcTab
)); // Y1
7737 CPPUNIT_ASSERT_EQUAL(1010.0, m_pDoc
->GetValue(20, 1, nSrcTab
)); // U2
7738 CPPUNIT_ASSERT_EQUAL(1014.0, m_pDoc
->GetValue(24, 1, nSrcTab
)); // Y2
7739 CPPUNIT_ASSERT_EQUAL(1020.0, m_pDoc
->GetValue(20, 2, nSrcTab
)); // U3
7740 CPPUNIT_ASSERT_EQUAL(1024.0, m_pDoc
->GetValue(24, 2, nSrcTab
)); // Y3
7741 CPPUNIT_ASSERT_EQUAL(1030.0, m_pDoc
->GetValue(20, 3, nSrcTab
)); // U4
7742 CPPUNIT_ASSERT_EQUAL(1031.0, m_pDoc
->GetValue(21, 3, nSrcTab
)); // B4
7743 CPPUNIT_ASSERT_EQUAL(1032.0, m_pDoc
->GetValue(22, 3, nSrcTab
)); // W4
7744 CPPUNIT_ASSERT_EQUAL(1033.0, m_pDoc
->GetValue(23, 3, nSrcTab
)); // X4
7745 CPPUNIT_ASSERT_EQUAL(1034.0, m_pDoc
->GetValue(24, 3, nSrcTab
)); // Y4
7746 CPPUNIT_ASSERT_EQUAL(u
"=A1"_ustr
, m_pDoc
->GetFormula(20, 0, nSrcTab
)); // U1
7747 CPPUNIT_ASSERT_EQUAL(u
"=B1"_ustr
, m_pDoc
->GetFormula(21, 0, nSrcTab
)); // V1
7748 CPPUNIT_ASSERT_EQUAL(u
"=C1"_ustr
, m_pDoc
->GetFormula(22, 0, nSrcTab
)); // W1
7749 CPPUNIT_ASSERT_EQUAL(u
"=D1"_ustr
, m_pDoc
->GetFormula(23, 0, nSrcTab
)); // X1
7750 CPPUNIT_ASSERT_EQUAL(u
"=E1"_ustr
, m_pDoc
->GetFormula(24, 0, nSrcTab
)); // Y1
7751 CPPUNIT_ASSERT_EQUAL(u
"=A2"_ustr
, m_pDoc
->GetFormula(20, 1, nSrcTab
)); // U2
7752 CPPUNIT_ASSERT_EQUAL(u
"=E2"_ustr
, m_pDoc
->GetFormula(24, 1, nSrcTab
)); // Y2
7753 CPPUNIT_ASSERT_EQUAL(u
"=A3"_ustr
, m_pDoc
->GetFormula(20, 2, nSrcTab
)); // U3
7754 CPPUNIT_ASSERT_EQUAL(u
"=E3"_ustr
, m_pDoc
->GetFormula(24, 2, nSrcTab
)); // Y3
7755 CPPUNIT_ASSERT_EQUAL(u
"=A4"_ustr
, m_pDoc
->GetFormula(20, 3, nSrcTab
)); // U4
7756 CPPUNIT_ASSERT_EQUAL(u
"=B4"_ustr
, m_pDoc
->GetFormula(21, 3, nSrcTab
)); // B4
7757 CPPUNIT_ASSERT_EQUAL(u
"=C4"_ustr
, m_pDoc
->GetFormula(22, 3, nSrcTab
)); // W4
7758 CPPUNIT_ASSERT_EQUAL(u
"=D4"_ustr
, m_pDoc
->GetFormula(23, 3, nSrcTab
)); // X4
7759 CPPUNIT_ASSERT_EQUAL(u
"=E4"_ustr
, m_pDoc
->GetFormula(24, 3, nSrcTab
)); // Y4
7761 // Note: Values (mostly) remain the same
7763 CPPUNIT_ASSERT_EQUAL(01.0, m_pDoc
->GetValue(0, 20, nSrcTab
));
7764 CPPUNIT_ASSERT_EQUAL(11.0, m_pDoc
->GetValue(1, 20, nSrcTab
));
7765 CPPUNIT_ASSERT_EQUAL(21.0, m_pDoc
->GetValue(2, 20, nSrcTab
));
7766 CPPUNIT_ASSERT_EQUAL(02.0, m_pDoc
->GetValue(0, 21, nSrcTab
));
7767 CPPUNIT_ASSERT_EQUAL(12.0, m_pDoc
->GetValue(1, 21, nSrcTab
));
7768 CPPUNIT_ASSERT_EQUAL(22.0, m_pDoc
->GetValue(2, 21, nSrcTab
));
7770 // ASSERT_FORMULA_EQUAL(*m_pDoc, ScAddress(0, 20, nSrcTab), "C12", "Wrong reference");
7771 CPPUNIT_ASSERT_EQUAL(OUString(aFBase
+ "C12"), m_pDoc
->GetFormula(0, 20, nSrcTab
));
7772 CPPUNIT_ASSERT_EQUAL(OUString(aFBase
+ "C13"), m_pDoc
->GetFormula(1, 20, nSrcTab
));
7773 CPPUNIT_ASSERT_EQUAL(OUString(aFBase
+ "C14"), m_pDoc
->GetFormula(2, 20, nSrcTab
));
7774 CPPUNIT_ASSERT_EQUAL(u
"=B3"_ustr
, m_pDoc
->GetFormula(0, 21, nSrcTab
));
7775 CPPUNIT_ASSERT_EQUAL(u
"=C3"_ustr
, m_pDoc
->GetFormula(1, 21, nSrcTab
));
7776 CPPUNIT_ASSERT_EQUAL(u
"=D3"_ustr
, m_pDoc
->GetFormula(2, 21, nSrcTab
));
7778 CPPUNIT_ASSERT_EQUAL(01.0, m_pDoc
->GetValue(0, 30, nSrcTab
));
7779 CPPUNIT_ASSERT_EQUAL(11.0, m_pDoc
->GetValue(1, 30, nSrcTab
));
7780 CPPUNIT_ASSERT_EQUAL(21.0, m_pDoc
->GetValue(2, 30, nSrcTab
));
7781 CPPUNIT_ASSERT_EQUAL(02.0, m_pDoc
->GetValue(0, 31, nSrcTab
));
7782 CPPUNIT_ASSERT_EQUAL(12.0, m_pDoc
->GetValue(1, 31, nSrcTab
));
7783 CPPUNIT_ASSERT_EQUAL(22.0, m_pDoc
->GetValue(2, 31, nSrcTab
));
7785 CPPUNIT_ASSERT_EQUAL(OUString(aFBase
+ "$C$12"), m_pDoc
->GetFormula(0, 30, nSrcTab
));
7786 CPPUNIT_ASSERT_EQUAL(OUString(aFBase
+ "$C$13"), m_pDoc
->GetFormula(1, 30, nSrcTab
));
7787 CPPUNIT_ASSERT_EQUAL(OUString(aFBase
+ "$C$14"), m_pDoc
->GetFormula(2, 30, nSrcTab
));
7788 CPPUNIT_ASSERT_EQUAL(u
"=$B$3"_ustr
, m_pDoc
->GetFormula(0, 31, nSrcTab
));
7789 CPPUNIT_ASSERT_EQUAL(u
"=$C$3"_ustr
, m_pDoc
->GetFormula(1, 31, nSrcTab
));
7790 CPPUNIT_ASSERT_EQUAL(u
"=$D$3"_ustr
, m_pDoc
->GetFormula(2, 31, nSrcTab
));
7792 CPPUNIT_ASSERT_EQUAL(nSrcTab
!= nDestTab
? u
"$Dest.$C$12"_ustr
: u
"$Test.$C$12"_ustr
,
7793 getRangeByName(u
"Range_B2"_ustr
));
7794 CPPUNIT_ASSERT_EQUAL(nSrcTab
!= nDestTab
? u
"$Dest.$C$13"_ustr
: u
"$Test.$C$13"_ustr
,
7795 getRangeByName(u
"Range_C2"_ustr
));
7796 CPPUNIT_ASSERT_EQUAL(nSrcTab
!= nDestTab
? u
"$Dest.$C$14"_ustr
: u
"$Test.$C$14"_ustr
,
7797 getRangeByName(u
"Range_D2"_ustr
));
7798 CPPUNIT_ASSERT_EQUAL(u
"$Test.$B$3"_ustr
, getRangeByName(u
"Range_B3"_ustr
)); // no change
7799 CPPUNIT_ASSERT_EQUAL(u
"$Test.$C$3"_ustr
, getRangeByName(u
"Range_C3"_ustr
)); // no change
7800 CPPUNIT_ASSERT_EQUAL(u
"$Test.$D$3"_ustr
, getRangeByName(u
"Range_D3"_ustr
)); // no change
7801 CPPUNIT_ASSERT_EQUAL(nSrcTab
!= nDestTab
? u
"$Dest.$C$12:$C$14"_ustr
7802 : u
"$Test.$C$12:$C$14"_ustr
,
7803 getRangeByName(u
"Range_B2_D2"_ustr
));
7804 CPPUNIT_ASSERT_EQUAL(u
"$Test.$B$3:$D$3"_ustr
, getRangeByName(u
"Range_B3_D3"_ustr
)); // no change
7805 CPPUNIT_ASSERT_EQUAL(u
"$Test.$B$2:$D$3"_ustr
, getRangeByName(u
"Range_B2_D3"_ustr
)); // no change
7806 CPPUNIT_ASSERT_EQUAL(u
"B2"_ustr
, getRangeByName(u
"RelRange_Cm20_R0"_ustr
)); // no change
7808 CPPUNIT_ASSERT_EQUAL(u
"=Range_B2"_ustr
, m_pDoc
->GetFormula(0, 40, nSrcTab
)); // A41
7809 CPPUNIT_ASSERT_EQUAL(u
"=Range_C2"_ustr
, m_pDoc
->GetFormula(1, 40, nSrcTab
)); // B41
7810 CPPUNIT_ASSERT_EQUAL(u
"=Range_D2"_ustr
, m_pDoc
->GetFormula(2, 40, nSrcTab
)); // C41
7811 CPPUNIT_ASSERT_EQUAL(u
"=Range_B3"_ustr
, m_pDoc
->GetFormula(0, 41, nSrcTab
)); // A42
7812 CPPUNIT_ASSERT_EQUAL(u
"=Range_C3"_ustr
, m_pDoc
->GetFormula(1, 41, nSrcTab
)); // B42
7813 CPPUNIT_ASSERT_EQUAL(u
"=Range_D3"_ustr
, m_pDoc
->GetFormula(2, 41, nSrcTab
)); // C42
7814 CPPUNIT_ASSERT_EQUAL(01.0, m_pDoc
->GetValue(0, 40, nSrcTab
));
7815 CPPUNIT_ASSERT_EQUAL(11.0, m_pDoc
->GetValue(1, 40, nSrcTab
));
7816 CPPUNIT_ASSERT_EQUAL(21.0, m_pDoc
->GetValue(2, 40, nSrcTab
));
7817 CPPUNIT_ASSERT_EQUAL(02.0, m_pDoc
->GetValue(0, 41, nSrcTab
));
7818 CPPUNIT_ASSERT_EQUAL(12.0, m_pDoc
->GetValue(1, 41, nSrcTab
));
7819 CPPUNIT_ASSERT_EQUAL(22.0, m_pDoc
->GetValue(2, 41, nSrcTab
));
7821 CPPUNIT_ASSERT_EQUAL(u
"=RelRange_Cm20_R0"_ustr
, m_pDoc
->GetFormula(0, 50, nSrcTab
)); // A51
7822 CPPUNIT_ASSERT_EQUAL(u
"=RelRange_Cm20_R0"_ustr
, m_pDoc
->GetFormula(1, 50, nSrcTab
)); // B51
7823 CPPUNIT_ASSERT_EQUAL(u
"=RelRange_Cm20_R0"_ustr
, m_pDoc
->GetFormula(2, 50, nSrcTab
)); // C51
7824 CPPUNIT_ASSERT_EQUAL(u
"=RelRange_Cm20_R0"_ustr
, m_pDoc
->GetFormula(0, 51, nSrcTab
)); // A52
7825 CPPUNIT_ASSERT_EQUAL(u
"=RelRange_Cm20_R0"_ustr
, m_pDoc
->GetFormula(1, 51, nSrcTab
)); // B52
7826 CPPUNIT_ASSERT_EQUAL(u
"=RelRange_Cm20_R0"_ustr
, m_pDoc
->GetFormula(2, 51, nSrcTab
)); // C52
7827 CPPUNIT_ASSERT_EQUAL(01.0, m_pDoc
->GetValue(0, 50, nSrcTab
));
7828 CPPUNIT_ASSERT_EQUAL(11.0, m_pDoc
->GetValue(1, 50, nSrcTab
));
7829 CPPUNIT_ASSERT_EQUAL(21.0, m_pDoc
->GetValue(2, 50, nSrcTab
));
7830 CPPUNIT_ASSERT_EQUAL(02.0, m_pDoc
->GetValue(0, 51, nSrcTab
));
7831 CPPUNIT_ASSERT_EQUAL(12.0, m_pDoc
->GetValue(1, 51, nSrcTab
));
7832 CPPUNIT_ASSERT_EQUAL(22.0, m_pDoc
->GetValue(2, 51, nSrcTab
));
7834 CPPUNIT_ASSERT_EQUAL(nSrcTab
!= nDestTab
? u
"=SUM(Dest.C12:C14)"_ustr
: u
"=SUM(C12:C14)"_ustr
,
7835 m_pDoc
->GetFormula(0, 60, nSrcTab
)); // A61
7836 CPPUNIT_ASSERT_EQUAL(nSrcTab
!= nDestTab
? u
"=SUM(Dest.C12:C14)"_ustr
: u
"=SUM(C12:C14)"_ustr
,
7837 m_pDoc
->GetFormula(1, 60, nSrcTab
)); // B61
7838 CPPUNIT_ASSERT_EQUAL(nSrcTab
!= nDestTab
? u
"=SUM(Dest.C12:C14)"_ustr
: u
"=SUM(C12:C14)"_ustr
,
7839 m_pDoc
->GetFormula(2, 60, nSrcTab
)); // C61
7840 CPPUNIT_ASSERT_EQUAL(u
"=SUM(B3:D3)"_ustr
, m_pDoc
->GetFormula(0, 61, nSrcTab
)); // A62
7841 CPPUNIT_ASSERT_EQUAL(u
"=SUM(B3:D3)"_ustr
, m_pDoc
->GetFormula(1, 61, nSrcTab
)); // B62
7842 CPPUNIT_ASSERT_EQUAL(u
"=SUM(B3:D3)"_ustr
, m_pDoc
->GetFormula(2, 61, nSrcTab
)); // C62
7843 CPPUNIT_ASSERT_EQUAL(33.0, m_pDoc
->GetValue(0, 60, nSrcTab
));
7844 CPPUNIT_ASSERT_EQUAL(33.0, m_pDoc
->GetValue(1, 60, nSrcTab
));
7845 CPPUNIT_ASSERT_EQUAL(33.0, m_pDoc
->GetValue(2, 60, nSrcTab
));
7846 CPPUNIT_ASSERT_EQUAL(36.0, m_pDoc
->GetValue(0, 61, nSrcTab
));
7847 CPPUNIT_ASSERT_EQUAL(36.0, m_pDoc
->GetValue(1, 61, nSrcTab
));
7848 CPPUNIT_ASSERT_EQUAL(36.0, m_pDoc
->GetValue(2, 61, nSrcTab
));
7850 CPPUNIT_ASSERT_EQUAL(nSrcTab
!= nDestTab
? u
"=SUM(Dest.$C$12:$C$14)"_ustr
7851 : u
"=SUM($C$12:$C$14)"_ustr
,
7852 m_pDoc
->GetFormula(0, 70, nSrcTab
)); // A71
7853 CPPUNIT_ASSERT_EQUAL(nSrcTab
!= nDestTab
? u
"=SUM(Dest.$C$12:$C$14)"_ustr
7854 : u
"=SUM($C$12:$C$14)"_ustr
,
7855 m_pDoc
->GetFormula(1, 70, nSrcTab
)); // B71
7856 CPPUNIT_ASSERT_EQUAL(nSrcTab
!= nDestTab
? u
"=SUM(Dest.$C$12:$C$14)"_ustr
7857 : u
"=SUM($C$12:$C$14)"_ustr
,
7858 m_pDoc
->GetFormula(2, 70, nSrcTab
)); // C71
7859 CPPUNIT_ASSERT_EQUAL(u
"=SUM($B$3:$D$3)"_ustr
, m_pDoc
->GetFormula(0, 71, nSrcTab
)); // A72
7860 CPPUNIT_ASSERT_EQUAL(u
"=SUM($B$3:$D$3)"_ustr
, m_pDoc
->GetFormula(1, 71, nSrcTab
)); // B72
7861 CPPUNIT_ASSERT_EQUAL(u
"=SUM($B$3:$D$3)"_ustr
, m_pDoc
->GetFormula(2, 71, nSrcTab
)); // C72
7862 CPPUNIT_ASSERT_EQUAL(33.0, m_pDoc
->GetValue(0, 70, nSrcTab
));
7863 CPPUNIT_ASSERT_EQUAL(33.0, m_pDoc
->GetValue(1, 70, nSrcTab
));
7864 CPPUNIT_ASSERT_EQUAL(33.0, m_pDoc
->GetValue(2, 70, nSrcTab
));
7865 CPPUNIT_ASSERT_EQUAL(36.0, m_pDoc
->GetValue(0, 71, nSrcTab
));
7866 CPPUNIT_ASSERT_EQUAL(36.0, m_pDoc
->GetValue(1, 71, nSrcTab
));
7867 CPPUNIT_ASSERT_EQUAL(36.0, m_pDoc
->GetValue(2, 71, nSrcTab
));
7869 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_B2_D2)"_ustr
, m_pDoc
->GetFormula(0, 80, nSrcTab
)); // A81
7870 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_B2_D2)"_ustr
, m_pDoc
->GetFormula(1, 80, nSrcTab
)); // B81
7871 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_B2_D2)"_ustr
, m_pDoc
->GetFormula(2, 80, nSrcTab
)); // C81
7872 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_B3_D3)"_ustr
, m_pDoc
->GetFormula(0, 81, nSrcTab
)); // A82
7873 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_B3_D3)"_ustr
, m_pDoc
->GetFormula(1, 81, nSrcTab
)); // B82
7874 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_B3_D3)"_ustr
, m_pDoc
->GetFormula(2, 81, nSrcTab
)); // C82
7875 CPPUNIT_ASSERT_EQUAL(33.0, m_pDoc
->GetValue(0, 80, nSrcTab
));
7876 CPPUNIT_ASSERT_EQUAL(33.0, m_pDoc
->GetValue(1, 80, nSrcTab
));
7877 CPPUNIT_ASSERT_EQUAL(33.0, m_pDoc
->GetValue(2, 80, nSrcTab
));
7878 CPPUNIT_ASSERT_EQUAL(36.0, m_pDoc
->GetValue(0, 81, nSrcTab
));
7879 CPPUNIT_ASSERT_EQUAL(36.0, m_pDoc
->GetValue(1, 81, nSrcTab
));
7880 CPPUNIT_ASSERT_EQUAL(36.0, m_pDoc
->GetValue(2, 81, nSrcTab
));
7882 // no change in formula after cut
7883 CPPUNIT_ASSERT_EQUAL(u
"=SUM($B$2:$D$3)"_ustr
, m_pDoc
->GetFormula(0, 90, nSrcTab
)); // A91
7884 CPPUNIT_ASSERT_EQUAL(u
"=SUM($B$2:$D$3)"_ustr
, m_pDoc
->GetFormula(1, 90, nSrcTab
)); // B91
7885 CPPUNIT_ASSERT_EQUAL(u
"=SUM($B$2:$D$3)"_ustr
, m_pDoc
->GetFormula(2, 90, nSrcTab
)); // C91
7886 CPPUNIT_ASSERT_EQUAL(u
"=SUM($B$2:$D$3)"_ustr
, m_pDoc
->GetFormula(0, 91, nSrcTab
)); // A92
7887 CPPUNIT_ASSERT_EQUAL(u
"=SUM($B$2:$D$3)"_ustr
, m_pDoc
->GetFormula(1, 91, nSrcTab
)); // B92
7888 CPPUNIT_ASSERT_EQUAL(u
"=SUM($B$2:$D$3)"_ustr
, m_pDoc
->GetFormula(2, 91, nSrcTab
)); // C92
7889 CPPUNIT_ASSERT_EQUAL(36.0, m_pDoc
->GetValue(0, 90, nSrcTab
)); // only 2nd row
7890 CPPUNIT_ASSERT_EQUAL(36.0, m_pDoc
->GetValue(1, 90, nSrcTab
)); // only 2nd row
7891 CPPUNIT_ASSERT_EQUAL(36.0, m_pDoc
->GetValue(2, 90, nSrcTab
)); // only 2nd row
7892 CPPUNIT_ASSERT_EQUAL(36.0, m_pDoc
->GetValue(0, 91, nSrcTab
)); // only 2nd row
7893 CPPUNIT_ASSERT_EQUAL(36.0, m_pDoc
->GetValue(1, 91, nSrcTab
)); // only 2nd row
7894 CPPUNIT_ASSERT_EQUAL(36.0, m_pDoc
->GetValue(2, 91, nSrcTab
)); // only 2nd row
7896 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_B2_D3)"_ustr
, m_pDoc
->GetFormula(0, 100, nSrcTab
)); // A101
7897 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_B2_D3)"_ustr
, m_pDoc
->GetFormula(1, 100, nSrcTab
)); // B101
7898 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_B2_D3)"_ustr
, m_pDoc
->GetFormula(2, 100, nSrcTab
)); // C101
7899 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_B2_D3)"_ustr
, m_pDoc
->GetFormula(0, 101, nSrcTab
)); // A102
7900 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_B2_D3)"_ustr
, m_pDoc
->GetFormula(1, 101, nSrcTab
)); // B102
7901 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_B2_D3)"_ustr
, m_pDoc
->GetFormula(2, 101, nSrcTab
)); // C102
7902 CPPUNIT_ASSERT_EQUAL(36.0, m_pDoc
->GetValue(0, 100, nSrcTab
)); // only 2nd row
7903 CPPUNIT_ASSERT_EQUAL(36.0, m_pDoc
->GetValue(1, 100, nSrcTab
)); // only 2nd row
7904 CPPUNIT_ASSERT_EQUAL(36.0, m_pDoc
->GetValue(2, 100, nSrcTab
)); // only 2nd row
7905 CPPUNIT_ASSERT_EQUAL(36.0, m_pDoc
->GetValue(0, 101, nSrcTab
)); // only 2nd row
7906 CPPUNIT_ASSERT_EQUAL(36.0, m_pDoc
->GetValue(1, 101, nSrcTab
)); // only 2nd row
7907 CPPUNIT_ASSERT_EQUAL(36.0, m_pDoc
->GetValue(2, 101, nSrcTab
)); // only 2nd row
7910 CPPUNIT_TEST_FIXTURE(TestCopyPaste
, testReferencedCutRangesRow
)
7912 const SCTAB nSrcTab
= 0;
7913 const SCTAB nDestTab
= 2;
7914 std::unique_ptr
<ScUndoCut
> pUndoCut
;
7915 std::unique_ptr
<ScUndoPaste
> pUndoPaste
;
7916 executeReferencedCutRangesRow(false, nSrcTab
, nDestTab
, true, pUndoCut
, pUndoPaste
);
7917 checkReferencedCutRangesRow(nSrcTab
, nDestTab
);
7921 checkReferencedCutRangesRowIntitial(nSrcTab
, u
"After undo"_ustr
);
7925 checkReferencedCutRangesRow(nSrcTab
, nDestTab
);
7929 checkReferencedCutRangesRowIntitial(nSrcTab
, u
"After undo"_ustr
);
7934 for (int i
= m_pDoc
->GetTableCount(); i
> 0; --i
)
7935 m_pDoc
->DeleteTab(i
- 1);
7939 CPPUNIT_TEST_FIXTURE(TestCopyPaste
, testReferencedCutTransposedRangesRowTab0To0
)
7941 checkReferencedCutTransposedRangesRowUndo(0, 0);
7945 CPPUNIT_TEST_FIXTURE(TestCopyPaste
, testReferencedCutTransposedRangesRowTab0To1
)
7947 checkReferencedCutTransposedRangesRowUndo(0, 1);
7951 CPPUNIT_TEST_FIXTURE(TestCopyPaste
, testReferencedCutTransposedRangesRowTab1To3
)
7953 checkReferencedCutTransposedRangesRowUndo(1, 3);
7957 CPPUNIT_TEST_FIXTURE(TestCopyPaste
, testReferencedCutTransposedRangesRowTab3To1
)
7959 checkReferencedCutTransposedRangesRowUndo(3, 1);
7963 void TestCopyPaste::checkReferencedCutTransposedRangesRowUndo(const SCTAB nSrcTab
,
7964 const SCTAB nDestTab
)
7966 std::unique_ptr
<ScUndoCut
> pUndoCut
;
7967 std::unique_ptr
<ScUndoPaste
> pUndoPaste
;
7968 executeReferencedCutRangesRow(true, nSrcTab
, nDestTab
, true, pUndoCut
, pUndoPaste
);
7969 checkReferencedCutTransposedRangesRow(nSrcTab
, nDestTab
);
7973 checkReferencedCutRangesRowIntitial(nSrcTab
, u
"After undo"_ustr
);
7977 checkReferencedCutTransposedRangesRow(nSrcTab
, nDestTab
);
7981 checkReferencedCutRangesRowIntitial(nSrcTab
, u
"After undo"_ustr
);
7986 for (int i
= m_pDoc
->GetTableCount(); i
> 0; --i
)
7987 m_pDoc
->DeleteTab(i
- 1);
7990 void TestCopyPaste::checkReferencedCutRangesColIntitial(const SCTAB nSrcTab
, const SCTAB nDestTab
,
7991 const OUString
& rDesc
)
7993 printRange(m_pDoc
, ScRange(1, 1, nSrcTab
, 2, 3, nSrcTab
), rDesc
.toUtf8() + ": Source");
7994 CPPUNIT_ASSERT_EQUAL(01.0, m_pDoc
->GetValue(1, 1, nSrcTab
));
7995 CPPUNIT_ASSERT_EQUAL(11.0, m_pDoc
->GetValue(1, 2, nSrcTab
));
7996 CPPUNIT_ASSERT_EQUAL(21.0, m_pDoc
->GetValue(1, 3, nSrcTab
));
7997 CPPUNIT_ASSERT_EQUAL(02.0, m_pDoc
->GetValue(2, 1, nSrcTab
));
7998 CPPUNIT_ASSERT_EQUAL(12.0, m_pDoc
->GetValue(2, 2, nSrcTab
));
7999 CPPUNIT_ASSERT_EQUAL(22.0, m_pDoc
->GetValue(2, 3, nSrcTab
));
8002 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(0, 0, nSrcTab
)); // A1
8003 CPPUNIT_ASSERT_EQUAL(1001.0, m_pDoc
->GetValue(0, 1, nSrcTab
)); // A2
8004 CPPUNIT_ASSERT_EQUAL(1002.0, m_pDoc
->GetValue(0, 2, nSrcTab
)); // A3
8005 CPPUNIT_ASSERT_EQUAL(1003.0, m_pDoc
->GetValue(0, 3, nSrcTab
)); // A4
8006 CPPUNIT_ASSERT_EQUAL(1004.0, m_pDoc
->GetValue(0, 4, nSrcTab
)); // A5
8007 CPPUNIT_ASSERT_EQUAL(1010.0, m_pDoc
->GetValue(1, 0, nSrcTab
)); // B1
8008 CPPUNIT_ASSERT_EQUAL(1014.0, m_pDoc
->GetValue(1, 4, nSrcTab
)); // B5
8009 CPPUNIT_ASSERT_EQUAL(1020.0, m_pDoc
->GetValue(2, 0, nSrcTab
)); // C1
8010 CPPUNIT_ASSERT_EQUAL(1024.0, m_pDoc
->GetValue(2, 4, nSrcTab
)); // C5
8011 CPPUNIT_ASSERT_EQUAL(1030.0, m_pDoc
->GetValue(3, 0, nSrcTab
)); // D1
8012 CPPUNIT_ASSERT_EQUAL(1031.0, m_pDoc
->GetValue(3, 1, nSrcTab
)); // D2
8013 CPPUNIT_ASSERT_EQUAL(1032.0, m_pDoc
->GetValue(3, 2, nSrcTab
)); // D3
8014 CPPUNIT_ASSERT_EQUAL(1033.0, m_pDoc
->GetValue(3, 3, nSrcTab
)); // D4
8015 CPPUNIT_ASSERT_EQUAL(1034.0, m_pDoc
->GetValue(3, 4, nSrcTab
)); // D5
8016 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(20, 0, nSrcTab
)); // U1
8017 CPPUNIT_ASSERT_EQUAL(1001.0, m_pDoc
->GetValue(20, 1, nSrcTab
)); // U2
8018 CPPUNIT_ASSERT_EQUAL(1002.0, m_pDoc
->GetValue(20, 2, nSrcTab
)); // U3
8019 CPPUNIT_ASSERT_EQUAL(1003.0, m_pDoc
->GetValue(20, 3, nSrcTab
)); // U4
8020 CPPUNIT_ASSERT_EQUAL(1004.0, m_pDoc
->GetValue(20, 4, nSrcTab
)); // U5
8021 CPPUNIT_ASSERT_EQUAL(1010.0, m_pDoc
->GetValue(21, 0, nSrcTab
)); // V1
8022 CPPUNIT_ASSERT_EQUAL(1014.0, m_pDoc
->GetValue(21, 4, nSrcTab
)); // V5
8023 CPPUNIT_ASSERT_EQUAL(1020.0, m_pDoc
->GetValue(22, 0, nSrcTab
)); // W1
8024 CPPUNIT_ASSERT_EQUAL(1024.0, m_pDoc
->GetValue(22, 4, nSrcTab
)); // W5
8025 CPPUNIT_ASSERT_EQUAL(1030.0, m_pDoc
->GetValue(23, 0, nSrcTab
)); // X1
8026 CPPUNIT_ASSERT_EQUAL(1031.0, m_pDoc
->GetValue(23, 1, nSrcTab
)); // X2
8027 CPPUNIT_ASSERT_EQUAL(1032.0, m_pDoc
->GetValue(23, 2, nSrcTab
)); // X3
8028 CPPUNIT_ASSERT_EQUAL(1033.0, m_pDoc
->GetValue(23, 3, nSrcTab
)); // X4
8029 CPPUNIT_ASSERT_EQUAL(1034.0, m_pDoc
->GetValue(23, 4, nSrcTab
)); // X5
8030 CPPUNIT_ASSERT_EQUAL(u
"=A1"_ustr
, m_pDoc
->GetFormula(20, 0, nSrcTab
)); // U1
8031 CPPUNIT_ASSERT_EQUAL(u
"=A2"_ustr
, m_pDoc
->GetFormula(20, 1, nSrcTab
)); // U2
8032 CPPUNIT_ASSERT_EQUAL(u
"=A3"_ustr
, m_pDoc
->GetFormula(20, 2, nSrcTab
)); // U3
8033 CPPUNIT_ASSERT_EQUAL(u
"=A4"_ustr
, m_pDoc
->GetFormula(20, 3, nSrcTab
)); // U4
8034 CPPUNIT_ASSERT_EQUAL(u
"=A5"_ustr
, m_pDoc
->GetFormula(20, 4, nSrcTab
)); // U5
8035 CPPUNIT_ASSERT_EQUAL(u
"=B1"_ustr
, m_pDoc
->GetFormula(21, 0, nSrcTab
)); // V1
8036 CPPUNIT_ASSERT_EQUAL(u
"=B5"_ustr
, m_pDoc
->GetFormula(21, 4, nSrcTab
)); // V5
8037 CPPUNIT_ASSERT_EQUAL(u
"=C1"_ustr
, m_pDoc
->GetFormula(22, 0, nSrcTab
)); // W1
8038 CPPUNIT_ASSERT_EQUAL(u
"=C5"_ustr
, m_pDoc
->GetFormula(22, 4, nSrcTab
)); // W5
8039 CPPUNIT_ASSERT_EQUAL(u
"=D1"_ustr
, m_pDoc
->GetFormula(23, 0, nSrcTab
)); // X1
8040 CPPUNIT_ASSERT_EQUAL(u
"=D2"_ustr
, m_pDoc
->GetFormula(23, 1, nSrcTab
)); // X2
8041 CPPUNIT_ASSERT_EQUAL(u
"=D3"_ustr
, m_pDoc
->GetFormula(23, 2, nSrcTab
)); // X3
8042 CPPUNIT_ASSERT_EQUAL(u
"=D4"_ustr
, m_pDoc
->GetFormula(23, 3, nSrcTab
)); // X4
8043 CPPUNIT_ASSERT_EQUAL(u
"=D5"_ustr
, m_pDoc
->GetFormula(23, 4, nSrcTab
)); // X5
8045 for (int i
= 10; i
< 20; ++i
)
8046 for (int j
= 0; j
< 10; ++j
)
8048 CPPUNIT_ASSERT_EQUAL(0.0, m_pDoc
->GetValue(j
, i
, nSrcTab
));
8049 CPPUNIT_ASSERT_EQUAL(OUString(), m_pDoc
->GetFormula(j
, i
, nSrcTab
));
8052 printValuesAndFormulasInRange(m_pDoc
, ScRange(0, 20, nSrcTab
, 1, 22, nSrcTab
),
8053 rDesc
.toUtf8() + ": Relative references");
8054 CPPUNIT_ASSERT_EQUAL(u
"=B2"_ustr
, m_pDoc
->GetFormula(0, 20, nSrcTab
)); // A21
8055 CPPUNIT_ASSERT_EQUAL(u
"=B3"_ustr
, m_pDoc
->GetFormula(0, 21, nSrcTab
)); // A22
8056 CPPUNIT_ASSERT_EQUAL(u
"=B4"_ustr
, m_pDoc
->GetFormula(0, 22, nSrcTab
)); // A23
8057 CPPUNIT_ASSERT_EQUAL(u
"=C2"_ustr
, m_pDoc
->GetFormula(1, 20, nSrcTab
)); // B21
8058 CPPUNIT_ASSERT_EQUAL(u
"=C3"_ustr
, m_pDoc
->GetFormula(1, 21, nSrcTab
)); // B22
8059 CPPUNIT_ASSERT_EQUAL(u
"=C4"_ustr
, m_pDoc
->GetFormula(1, 22, nSrcTab
)); // B23
8060 CPPUNIT_ASSERT_EQUAL(01.0, m_pDoc
->GetValue(0, 20, nSrcTab
));
8061 CPPUNIT_ASSERT_EQUAL(11.0, m_pDoc
->GetValue(0, 21, nSrcTab
));
8062 CPPUNIT_ASSERT_EQUAL(21.0, m_pDoc
->GetValue(0, 22, nSrcTab
));
8063 CPPUNIT_ASSERT_EQUAL(02.0, m_pDoc
->GetValue(1, 20, nSrcTab
));
8064 CPPUNIT_ASSERT_EQUAL(12.0, m_pDoc
->GetValue(1, 21, nSrcTab
));
8065 CPPUNIT_ASSERT_EQUAL(22.0, m_pDoc
->GetValue(1, 22, nSrcTab
));
8067 printValuesAndFormulasInRange(m_pDoc
, ScRange(0, 30, nSrcTab
, 1, 32, nSrcTab
),
8068 rDesc
.toUtf8() + ": Absolute references");
8069 CPPUNIT_ASSERT_EQUAL(u
"=$B$2"_ustr
, m_pDoc
->GetFormula(0, 30, nSrcTab
)); // A31
8070 CPPUNIT_ASSERT_EQUAL(u
"=$B$3"_ustr
, m_pDoc
->GetFormula(0, 31, nSrcTab
)); // A32
8071 CPPUNIT_ASSERT_EQUAL(u
"=$B$4"_ustr
, m_pDoc
->GetFormula(0, 32, nSrcTab
)); // A33
8072 CPPUNIT_ASSERT_EQUAL(u
"=$C$2"_ustr
, m_pDoc
->GetFormula(1, 30, nSrcTab
)); // B31
8073 CPPUNIT_ASSERT_EQUAL(u
"=$C$3"_ustr
, m_pDoc
->GetFormula(1, 31, nSrcTab
)); // B32
8074 CPPUNIT_ASSERT_EQUAL(u
"=$C$4"_ustr
, m_pDoc
->GetFormula(1, 32, nSrcTab
)); // B33
8075 CPPUNIT_ASSERT_EQUAL(01.0, m_pDoc
->GetValue(0, 30, nSrcTab
));
8076 CPPUNIT_ASSERT_EQUAL(11.0, m_pDoc
->GetValue(0, 31, nSrcTab
));
8077 CPPUNIT_ASSERT_EQUAL(21.0, m_pDoc
->GetValue(0, 32, nSrcTab
));
8078 CPPUNIT_ASSERT_EQUAL(02.0, m_pDoc
->GetValue(1, 30, nSrcTab
));
8079 CPPUNIT_ASSERT_EQUAL(12.0, m_pDoc
->GetValue(1, 31, nSrcTab
));
8080 CPPUNIT_ASSERT_EQUAL(22.0, m_pDoc
->GetValue(1, 32, nSrcTab
));
8082 CPPUNIT_ASSERT_EQUAL(u
"$Test.$B$2"_ustr
, getRangeByName(u
"Range_B2"_ustr
));
8083 CPPUNIT_ASSERT_EQUAL(u
"$Test.$B$3"_ustr
, getRangeByName(u
"Range_B3"_ustr
));
8084 CPPUNIT_ASSERT_EQUAL(u
"$Test.$B$4"_ustr
, getRangeByName(u
"Range_B4"_ustr
));
8085 CPPUNIT_ASSERT_EQUAL(u
"$Test.$C$2"_ustr
, getRangeByName(u
"Range_C2"_ustr
));
8086 CPPUNIT_ASSERT_EQUAL(u
"$Test.$C$3"_ustr
, getRangeByName(u
"Range_C3"_ustr
));
8087 CPPUNIT_ASSERT_EQUAL(u
"$Test.$C$4"_ustr
, getRangeByName(u
"Range_C4"_ustr
));
8088 CPPUNIT_ASSERT_EQUAL(u
"$Test.$B$2:$B$4"_ustr
, getRangeByName(u
"Range_B2_B4"_ustr
));
8089 CPPUNIT_ASSERT_EQUAL(u
"$Test.$C$2:$C$4"_ustr
, getRangeByName(u
"Range_C2_C4"_ustr
));
8090 CPPUNIT_ASSERT_EQUAL(u
"$Test.$B$2:$C$4"_ustr
, getRangeByName(u
"Range_B2_C4"_ustr
));
8091 CPPUNIT_ASSERT_EQUAL(u
"B2"_ustr
, getRangeByName(u
"RelRange_Cm20_R0"_ustr
));
8093 printValuesAndFormulasInRange(m_pDoc
, ScRange(0, 40, nSrcTab
, 1, 42, nSrcTab
),
8094 rDesc
.toUtf8() + ": Absolute ranges");
8095 CPPUNIT_ASSERT_EQUAL(u
"=Range_B2"_ustr
, m_pDoc
->GetFormula(0, 40, nSrcTab
)); // A41
8096 CPPUNIT_ASSERT_EQUAL(u
"=Range_B3"_ustr
, m_pDoc
->GetFormula(0, 41, nSrcTab
)); // A42
8097 CPPUNIT_ASSERT_EQUAL(u
"=Range_B4"_ustr
, m_pDoc
->GetFormula(0, 42, nSrcTab
)); // A43
8098 CPPUNIT_ASSERT_EQUAL(u
"=Range_C2"_ustr
, m_pDoc
->GetFormula(1, 40, nSrcTab
)); // B41
8099 CPPUNIT_ASSERT_EQUAL(u
"=Range_C3"_ustr
, m_pDoc
->GetFormula(1, 41, nSrcTab
)); // B42
8100 CPPUNIT_ASSERT_EQUAL(u
"=Range_C4"_ustr
, m_pDoc
->GetFormula(1, 42, nSrcTab
)); // B43
8101 CPPUNIT_ASSERT_EQUAL(01.0, m_pDoc
->GetValue(0, 40, nSrcTab
));
8102 CPPUNIT_ASSERT_EQUAL(11.0, m_pDoc
->GetValue(0, 41, nSrcTab
));
8103 CPPUNIT_ASSERT_EQUAL(21.0, m_pDoc
->GetValue(0, 42, nSrcTab
));
8104 CPPUNIT_ASSERT_EQUAL(02.0, m_pDoc
->GetValue(1, 40, nSrcTab
));
8105 CPPUNIT_ASSERT_EQUAL(12.0, m_pDoc
->GetValue(1, 41, nSrcTab
));
8106 CPPUNIT_ASSERT_EQUAL(22.0, m_pDoc
->GetValue(1, 42, nSrcTab
));
8108 printValuesAndFormulasInRange(m_pDoc
, ScRange(0, 50, nSrcTab
, 1, 52, nSrcTab
),
8109 rDesc
.toUtf8() + ": Relative ranges");
8110 CPPUNIT_ASSERT_EQUAL(u
"=RelRange_Cm20_R0"_ustr
, m_pDoc
->GetFormula(0, 50, nSrcTab
)); // A51
8111 CPPUNIT_ASSERT_EQUAL(u
"=RelRange_Cm20_R0"_ustr
, m_pDoc
->GetFormula(0, 51, nSrcTab
)); // A52
8112 CPPUNIT_ASSERT_EQUAL(u
"=RelRange_Cm20_R0"_ustr
, m_pDoc
->GetFormula(0, 52, nSrcTab
)); // A53
8113 CPPUNIT_ASSERT_EQUAL(u
"=RelRange_Cm20_R0"_ustr
, m_pDoc
->GetFormula(1, 50, nSrcTab
)); // B51
8114 CPPUNIT_ASSERT_EQUAL(u
"=RelRange_Cm20_R0"_ustr
, m_pDoc
->GetFormula(1, 51, nSrcTab
)); // B52
8115 CPPUNIT_ASSERT_EQUAL(u
"=RelRange_Cm20_R0"_ustr
, m_pDoc
->GetFormula(1, 52, nSrcTab
)); // B53
8116 CPPUNIT_ASSERT_EQUAL(01.0, m_pDoc
->GetValue(0, 50, nSrcTab
));
8117 CPPUNIT_ASSERT_EQUAL(11.0, m_pDoc
->GetValue(0, 51, nSrcTab
));
8118 CPPUNIT_ASSERT_EQUAL(21.0, m_pDoc
->GetValue(0, 52, nSrcTab
));
8119 CPPUNIT_ASSERT_EQUAL(02.0, m_pDoc
->GetValue(1, 50, nSrcTab
));
8120 CPPUNIT_ASSERT_EQUAL(12.0, m_pDoc
->GetValue(1, 51, nSrcTab
));
8121 CPPUNIT_ASSERT_EQUAL(22.0, m_pDoc
->GetValue(1, 52, nSrcTab
));
8123 printValuesAndFormulasInRange(m_pDoc
, ScRange(0, 60, nSrcTab
, 1, 62, nSrcTab
),
8124 rDesc
.toUtf8() + ": Relative sum");
8125 CPPUNIT_ASSERT_EQUAL(u
"=SUM(B2:B4)"_ustr
, m_pDoc
->GetFormula(0, 60, nSrcTab
)); // A61
8126 CPPUNIT_ASSERT_EQUAL(u
"=SUM(B2:B4)"_ustr
, m_pDoc
->GetFormula(0, 61, nSrcTab
)); // A62
8127 CPPUNIT_ASSERT_EQUAL(u
"=SUM(B2:B4)"_ustr
, m_pDoc
->GetFormula(0, 62, nSrcTab
)); // A63
8128 CPPUNIT_ASSERT_EQUAL(u
"=SUM(C2:C4)"_ustr
, m_pDoc
->GetFormula(1, 60, nSrcTab
)); // B61
8129 CPPUNIT_ASSERT_EQUAL(u
"=SUM(C2:C4)"_ustr
, m_pDoc
->GetFormula(1, 61, nSrcTab
)); // B62
8130 CPPUNIT_ASSERT_EQUAL(u
"=SUM(C2:C4)"_ustr
, m_pDoc
->GetFormula(1, 62, nSrcTab
)); // B63
8131 CPPUNIT_ASSERT_EQUAL(33.0, m_pDoc
->GetValue(0, 60, nSrcTab
));
8132 CPPUNIT_ASSERT_EQUAL(33.0, m_pDoc
->GetValue(0, 61, nSrcTab
));
8133 CPPUNIT_ASSERT_EQUAL(33.0, m_pDoc
->GetValue(0, 62, nSrcTab
));
8134 CPPUNIT_ASSERT_EQUAL(36.0, m_pDoc
->GetValue(1, 60, nSrcTab
));
8135 CPPUNIT_ASSERT_EQUAL(36.0, m_pDoc
->GetValue(1, 61, nSrcTab
));
8136 CPPUNIT_ASSERT_EQUAL(36.0, m_pDoc
->GetValue(1, 62, nSrcTab
));
8138 printValuesAndFormulasInRange(m_pDoc
, ScRange(0, 70, nSrcTab
, 1, 72, nSrcTab
),
8139 rDesc
.toUtf8() + ": Absolute sum");
8140 CPPUNIT_ASSERT_EQUAL(u
"=SUM($B$2:$B$4)"_ustr
, m_pDoc
->GetFormula(0, 70, nSrcTab
)); // A71
8141 CPPUNIT_ASSERT_EQUAL(u
"=SUM($B$2:$B$4)"_ustr
, m_pDoc
->GetFormula(0, 71, nSrcTab
)); // A72
8142 CPPUNIT_ASSERT_EQUAL(u
"=SUM($B$2:$B$4)"_ustr
, m_pDoc
->GetFormula(0, 72, nSrcTab
)); // A73
8143 CPPUNIT_ASSERT_EQUAL(u
"=SUM($C$2:$C$4)"_ustr
, m_pDoc
->GetFormula(1, 70, nSrcTab
)); // B71
8144 CPPUNIT_ASSERT_EQUAL(u
"=SUM($C$2:$C$4)"_ustr
, m_pDoc
->GetFormula(1, 71, nSrcTab
)); // B72
8145 CPPUNIT_ASSERT_EQUAL(u
"=SUM($C$2:$C$4)"_ustr
, m_pDoc
->GetFormula(1, 72, nSrcTab
)); // B73
8146 CPPUNIT_ASSERT_EQUAL(33.0, m_pDoc
->GetValue(0, 70, nSrcTab
));
8147 CPPUNIT_ASSERT_EQUAL(33.0, m_pDoc
->GetValue(0, 71, nSrcTab
));
8148 CPPUNIT_ASSERT_EQUAL(33.0, m_pDoc
->GetValue(0, 72, nSrcTab
));
8149 CPPUNIT_ASSERT_EQUAL(36.0, m_pDoc
->GetValue(1, 70, nSrcTab
));
8150 CPPUNIT_ASSERT_EQUAL(36.0, m_pDoc
->GetValue(1, 71, nSrcTab
));
8151 CPPUNIT_ASSERT_EQUAL(36.0, m_pDoc
->GetValue(1, 72, nSrcTab
));
8153 printValuesAndFormulasInRange(m_pDoc
, ScRange(0, 80, nSrcTab
, 1, 82, nSrcTab
),
8154 rDesc
.toUtf8() + ": Relative range sum");
8155 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_B2_B4)"_ustr
, m_pDoc
->GetFormula(0, 80, nSrcTab
)); // A81
8156 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_B2_B4)"_ustr
, m_pDoc
->GetFormula(0, 81, nSrcTab
)); // A82
8157 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_B2_B4)"_ustr
, m_pDoc
->GetFormula(0, 82, nSrcTab
)); // A83
8158 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_C2_C4)"_ustr
, m_pDoc
->GetFormula(1, 80, nSrcTab
)); // B81
8159 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_C2_C4)"_ustr
, m_pDoc
->GetFormula(1, 81, nSrcTab
)); // B82
8160 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_C2_C4)"_ustr
, m_pDoc
->GetFormula(1, 82, nSrcTab
)); // B83
8161 CPPUNIT_ASSERT_EQUAL(33.0, m_pDoc
->GetValue(0, 80, nSrcTab
));
8162 CPPUNIT_ASSERT_EQUAL(33.0, m_pDoc
->GetValue(0, 81, nSrcTab
));
8163 CPPUNIT_ASSERT_EQUAL(33.0, m_pDoc
->GetValue(0, 82, nSrcTab
));
8164 CPPUNIT_ASSERT_EQUAL(36.0, m_pDoc
->GetValue(1, 80, nSrcTab
));
8165 CPPUNIT_ASSERT_EQUAL(36.0, m_pDoc
->GetValue(1, 81, nSrcTab
));
8166 CPPUNIT_ASSERT_EQUAL(36.0, m_pDoc
->GetValue(1, 82, nSrcTab
));
8168 printValuesAndFormulasInRange(m_pDoc
, ScRange(0, 90, nSrcTab
, 1, 92, nSrcTab
),
8169 rDesc
.toUtf8() + ": Absolute sum");
8170 CPPUNIT_ASSERT_EQUAL(u
"=SUM($B$2:$C$4)"_ustr
, m_pDoc
->GetFormula(0, 90, nSrcTab
)); // A91
8171 CPPUNIT_ASSERT_EQUAL(u
"=SUM($B$2:$C$4)"_ustr
, m_pDoc
->GetFormula(0, 91, nSrcTab
)); // A92
8172 CPPUNIT_ASSERT_EQUAL(u
"=SUM($B$2:$C$4)"_ustr
, m_pDoc
->GetFormula(0, 92, nSrcTab
)); // A93
8173 CPPUNIT_ASSERT_EQUAL(u
"=SUM($B$2:$C$4)"_ustr
, m_pDoc
->GetFormula(1, 90, nSrcTab
)); // B91
8174 CPPUNIT_ASSERT_EQUAL(u
"=SUM($B$2:$C$4)"_ustr
, m_pDoc
->GetFormula(1, 91, nSrcTab
)); // B92
8175 CPPUNIT_ASSERT_EQUAL(u
"=SUM($B$2:$C$4)"_ustr
, m_pDoc
->GetFormula(1, 92, nSrcTab
)); // B93
8176 CPPUNIT_ASSERT_EQUAL(69.0, m_pDoc
->GetValue(0, 90, nSrcTab
));
8177 CPPUNIT_ASSERT_EQUAL(69.0, m_pDoc
->GetValue(0, 91, nSrcTab
));
8178 CPPUNIT_ASSERT_EQUAL(69.0, m_pDoc
->GetValue(0, 92, nSrcTab
));
8179 CPPUNIT_ASSERT_EQUAL(69.0, m_pDoc
->GetValue(1, 90, nSrcTab
));
8180 CPPUNIT_ASSERT_EQUAL(69.0, m_pDoc
->GetValue(1, 91, nSrcTab
));
8181 CPPUNIT_ASSERT_EQUAL(69.0, m_pDoc
->GetValue(1, 92, nSrcTab
));
8183 printValuesAndFormulasInRange(m_pDoc
, ScRange(0, 100, nSrcTab
, 1, 102, nSrcTab
),
8184 rDesc
.toUtf8() + ": Relative range sum");
8185 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_B2_C4)"_ustr
, m_pDoc
->GetFormula(0, 100, nSrcTab
)); // A101
8186 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_B2_C4)"_ustr
, m_pDoc
->GetFormula(0, 101, nSrcTab
)); // A102
8187 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_B2_C4)"_ustr
, m_pDoc
->GetFormula(0, 102, nSrcTab
)); // A103
8188 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_B2_C4)"_ustr
, m_pDoc
->GetFormula(1, 100, nSrcTab
)); // B101
8189 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_B2_C4)"_ustr
, m_pDoc
->GetFormula(1, 101, nSrcTab
)); // B102
8190 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_B2_C4)"_ustr
, m_pDoc
->GetFormula(1, 102, nSrcTab
)); // B103
8191 CPPUNIT_ASSERT_EQUAL(69.0, m_pDoc
->GetValue(0, 100, nSrcTab
));
8192 CPPUNIT_ASSERT_EQUAL(69.0, m_pDoc
->GetValue(0, 101, nSrcTab
));
8193 CPPUNIT_ASSERT_EQUAL(69.0, m_pDoc
->GetValue(0, 102, nSrcTab
));
8194 CPPUNIT_ASSERT_EQUAL(69.0, m_pDoc
->GetValue(1, 100, nSrcTab
));
8195 CPPUNIT_ASSERT_EQUAL(69.0, m_pDoc
->GetValue(1, 101, nSrcTab
));
8196 CPPUNIT_ASSERT_EQUAL(69.0, m_pDoc
->GetValue(1, 102, nSrcTab
));
8198 // References to the dest range
8199 OUString
aFBase(u
"="_ustr
);
8200 if (nSrcTab
!= nDestTab
)
8203 // Existing references to the destination range must not change
8204 CPPUNIT_ASSERT_EQUAL(OUString(aFBase
+ "C12"), m_pDoc
->GetFormula(0, 112, nSrcTab
));
8205 CPPUNIT_ASSERT_EQUAL(OUString(aFBase
+ "C13"), m_pDoc
->GetFormula(0, 113, nSrcTab
));
8206 CPPUNIT_ASSERT_EQUAL(OUString(aFBase
+ "C14"), m_pDoc
->GetFormula(0, 114, nSrcTab
));
8207 CPPUNIT_ASSERT_EQUAL(OUString(aFBase
+ "D12"), m_pDoc
->GetFormula(1, 112, nSrcTab
));
8208 CPPUNIT_ASSERT_EQUAL(OUString(aFBase
+ "D13"), m_pDoc
->GetFormula(1, 113, nSrcTab
));
8209 CPPUNIT_ASSERT_EQUAL(OUString(aFBase
+ "D14"), m_pDoc
->GetFormula(1, 114, nSrcTab
));
8210 CPPUNIT_ASSERT_EQUAL(OUString(aFBase
+ "E12"), m_pDoc
->GetFormula(2, 112, nSrcTab
));
8211 CPPUNIT_ASSERT_EQUAL(OUString(aFBase
+ "E13"), m_pDoc
->GetFormula(2, 113, nSrcTab
));
8212 CPPUNIT_ASSERT_EQUAL(OUString(aFBase
+ "E14"), m_pDoc
->GetFormula(2, 114, nSrcTab
));
8215 void TestCopyPaste::executeReferencedCutRangesCol(const bool bTransposed
, const SCTAB nSrcTab
,
8216 const SCTAB nDestTab
, const bool bUndo
,
8217 std::unique_ptr
<ScUndoCut
>& pUndoCut
,
8218 std::unique_ptr
<ScUndoPaste
>& pUndoPaste
)
8220 sc::AutoCalcSwitch
aACSwitch(*m_pDoc
, true); // turn on auto calc.
8222 for (int i
= 0; i
< nSrcTab
; ++i
)
8223 m_pDoc
->InsertTab(i
, "Empty Tab " + OUString::number(i
));
8224 m_pDoc
->InsertTab(nSrcTab
, u
"Test"_ustr
);
8226 m_pDoc
->SetValue(1, 1, nSrcTab
, 01.0); // B2 \.
8227 m_pDoc
->SetValue(1, 2, nSrcTab
, 11.0); // B3 | cut
8228 m_pDoc
->SetValue(1, 3, nSrcTab
, 21.0); // B4 /
8229 m_pDoc
->SetValue(2, 1, nSrcTab
, 02.0); // C2
8230 m_pDoc
->SetValue(2, 2, nSrcTab
, 12.0); // C3
8231 m_pDoc
->SetValue(2, 3, nSrcTab
, 22.0); // C4
8232 printRange(m_pDoc
, ScRange(1, 1, nSrcTab
, 2, 3, nSrcTab
), "Source");
8235 m_pDoc
->SetValue(0, 0, nSrcTab
, 1000.0); // A1
8236 m_pDoc
->SetValue(0, 1, nSrcTab
, 1001.0); // A2
8237 m_pDoc
->SetValue(0, 2, nSrcTab
, 1002.0); // A3
8238 m_pDoc
->SetValue(0, 3, nSrcTab
, 1003.0); // A4
8239 m_pDoc
->SetValue(0, 4, nSrcTab
, 1004.0); // A5
8240 m_pDoc
->SetValue(1, 0, nSrcTab
, 1010.0); // B1
8241 m_pDoc
->SetValue(1, 4, nSrcTab
, 1014.0); // B5
8242 m_pDoc
->SetValue(2, 0, nSrcTab
, 1020.0); // C1
8243 m_pDoc
->SetValue(2, 4, nSrcTab
, 1024.0); // C5
8244 m_pDoc
->SetValue(3, 0, nSrcTab
, 1030.0); // D1
8245 m_pDoc
->SetValue(3, 1, nSrcTab
, 1031.0); // D2
8246 m_pDoc
->SetValue(3, 2, nSrcTab
, 1032.0); // D3
8247 m_pDoc
->SetValue(3, 3, nSrcTab
, 1033.0); // D4
8248 m_pDoc
->SetValue(3, 4, nSrcTab
, 1034.0); // D5
8250 m_pDoc
->SetString(20, 0, nSrcTab
, u
"=A1"_ustr
); // U1
8251 m_pDoc
->SetString(20, 1, nSrcTab
, u
"=A2"_ustr
); // U2
8252 m_pDoc
->SetString(20, 2, nSrcTab
, u
"=A3"_ustr
); // U3
8253 m_pDoc
->SetString(20, 3, nSrcTab
, u
"=A4"_ustr
); // U4
8254 m_pDoc
->SetString(20, 4, nSrcTab
, u
"=A5"_ustr
); // U5
8255 m_pDoc
->SetString(21, 0, nSrcTab
, u
"=B1"_ustr
); // V1
8256 m_pDoc
->SetString(21, 4, nSrcTab
, u
"=B5"_ustr
); // V5
8257 m_pDoc
->SetString(22, 0, nSrcTab
, u
"=C1"_ustr
); // W1
8258 m_pDoc
->SetString(22, 4, nSrcTab
, u
"=C5"_ustr
); // W5
8259 m_pDoc
->SetString(23, 0, nSrcTab
, u
"=D1"_ustr
); // X1
8260 m_pDoc
->SetString(23, 1, nSrcTab
, u
"=D2"_ustr
); // X2
8261 m_pDoc
->SetString(23, 2, nSrcTab
, u
"=D3"_ustr
); // X3
8262 m_pDoc
->SetString(23, 3, nSrcTab
, u
"=D4"_ustr
); // X4
8263 m_pDoc
->SetString(23, 4, nSrcTab
, u
"=D5"_ustr
); // X5
8265 // Cell position is used for ranges relative to current position
8266 ScAddress
cellA1(0, 0, nSrcTab
);
8267 CPPUNIT_ASSERT(m_pDoc
->InsertNewRangeName(u
"Range_B2"_ustr
, cellA1
, u
"$Test.$B$2"_ustr
));
8268 CPPUNIT_ASSERT(m_pDoc
->InsertNewRangeName(u
"Range_B3"_ustr
, cellA1
, u
"$Test.$B$3"_ustr
));
8269 CPPUNIT_ASSERT(m_pDoc
->InsertNewRangeName(u
"Range_B4"_ustr
, cellA1
, u
"$Test.$B$4"_ustr
));
8270 CPPUNIT_ASSERT(m_pDoc
->InsertNewRangeName(u
"Range_C2"_ustr
, cellA1
, u
"$Test.$C$2"_ustr
));
8271 CPPUNIT_ASSERT(m_pDoc
->InsertNewRangeName(u
"Range_C3"_ustr
, cellA1
, u
"$Test.$C$3"_ustr
));
8272 CPPUNIT_ASSERT(m_pDoc
->InsertNewRangeName(u
"Range_C4"_ustr
, cellA1
, u
"$Test.$C$4"_ustr
));
8274 m_pDoc
->InsertNewRangeName(u
"Range_B2_B4"_ustr
, cellA1
, u
"$Test.$B$2:$B$4"_ustr
));
8276 m_pDoc
->InsertNewRangeName(u
"Range_C2_C4"_ustr
, cellA1
, u
"$Test.$C$2:$C$4"_ustr
));
8278 m_pDoc
->InsertNewRangeName(u
"Range_B2_C4"_ustr
, cellA1
, u
"$Test.$B$2:$C$4"_ustr
));
8279 CPPUNIT_ASSERT(m_pDoc
->InsertNewRangeName(u
"RelRange_Cm20_R0"_ustr
, ScAddress(1, 21, nSrcTab
),
8282 m_pDoc
->SetString(0, 20, nSrcTab
, u
"=B2"_ustr
); // A21
8283 m_pDoc
->SetString(0, 21, nSrcTab
, u
"=B3"_ustr
); // A22
8284 m_pDoc
->SetString(0, 22, nSrcTab
, u
"=B4"_ustr
); // A23
8285 m_pDoc
->SetString(1, 20, nSrcTab
, u
"=C2"_ustr
); // B21
8286 m_pDoc
->SetString(1, 21, nSrcTab
, u
"=C3"_ustr
); // B22
8287 m_pDoc
->SetString(1, 22, nSrcTab
, u
"=C4"_ustr
); // B23
8289 m_pDoc
->SetString(0, 30, nSrcTab
, u
"=$B$2"_ustr
); // A31
8290 m_pDoc
->SetString(0, 31, nSrcTab
, u
"=$B$3"_ustr
); // A32
8291 m_pDoc
->SetString(0, 32, nSrcTab
, u
"=$B$4"_ustr
); // A33
8292 m_pDoc
->SetString(1, 30, nSrcTab
, u
"=$C$2"_ustr
); // B31
8293 m_pDoc
->SetString(1, 31, nSrcTab
, u
"=$C$3"_ustr
); // B32
8294 m_pDoc
->SetString(1, 32, nSrcTab
, u
"=$C$4"_ustr
); // B33
8296 m_pDoc
->SetString(0, 40, nSrcTab
, u
"=Range_B2"_ustr
); // A41
8297 m_pDoc
->SetString(0, 41, nSrcTab
, u
"=Range_B3"_ustr
); // A42
8298 m_pDoc
->SetString(0, 42, nSrcTab
, u
"=Range_B4"_ustr
); // A43
8299 m_pDoc
->SetString(1, 40, nSrcTab
, u
"=Range_C2"_ustr
); // B41
8300 m_pDoc
->SetString(1, 41, nSrcTab
, u
"=Range_C3"_ustr
); // B42
8301 m_pDoc
->SetString(1, 42, nSrcTab
, u
"=Range_C4"_ustr
); // B43
8303 m_pDoc
->SetString(0, 50, nSrcTab
, u
"=RelRange_Cm20_R0"_ustr
); // A51
8304 m_pDoc
->SetString(0, 51, nSrcTab
, u
"=RelRange_Cm20_R0"_ustr
); // A52
8305 m_pDoc
->SetString(0, 52, nSrcTab
, u
"=RelRange_Cm20_R0"_ustr
); // A53
8306 m_pDoc
->SetString(1, 50, nSrcTab
, u
"=RelRange_Cm20_R0"_ustr
); // B51
8307 m_pDoc
->SetString(1, 51, nSrcTab
, u
"=RelRange_Cm20_R0"_ustr
); // B52
8308 m_pDoc
->SetString(1, 52, nSrcTab
, u
"=RelRange_Cm20_R0"_ustr
); // B53
8310 m_pDoc
->SetString(0, 60, nSrcTab
, u
"=SUM(B2:B4"_ustr
); // A61
8311 m_pDoc
->SetString(0, 61, nSrcTab
, u
"=SUM(B2:B4"_ustr
); // A62
8312 m_pDoc
->SetString(0, 62, nSrcTab
, u
"=SUM(B2:B4"_ustr
); // A63
8313 m_pDoc
->SetString(1, 60, nSrcTab
, u
"=SUM(C2:C4"_ustr
); // B61
8314 m_pDoc
->SetString(1, 61, nSrcTab
, u
"=SUM(C2:C4"_ustr
); // B62
8315 m_pDoc
->SetString(1, 62, nSrcTab
, u
"=SUM(C2:C4"_ustr
); // B63
8317 m_pDoc
->SetString(0, 70, nSrcTab
, u
"=SUM($B$2:$B$4"_ustr
); // A71
8318 m_pDoc
->SetString(0, 71, nSrcTab
, u
"=SUM($B$2:$B$4"_ustr
); // A72
8319 m_pDoc
->SetString(0, 72, nSrcTab
, u
"=SUM($B$2:$B$4"_ustr
); // A73
8320 m_pDoc
->SetString(1, 70, nSrcTab
, u
"=SUM($C$2:$C$4"_ustr
); // B71
8321 m_pDoc
->SetString(1, 71, nSrcTab
, u
"=SUM($C$2:$C$4"_ustr
); // B72
8322 m_pDoc
->SetString(1, 72, nSrcTab
, u
"=SUM($C$2:$C$4"_ustr
); // B73
8324 m_pDoc
->SetString(0, 80, nSrcTab
, u
"=SUM(Range_B2_B4)"_ustr
); // A81
8325 m_pDoc
->SetString(0, 81, nSrcTab
, u
"=SUM(Range_B2_B4)"_ustr
); // A82
8326 m_pDoc
->SetString(0, 82, nSrcTab
, u
"=SUM(Range_B2_B4)"_ustr
); // A83
8327 m_pDoc
->SetString(1, 80, nSrcTab
, u
"=SUM(Range_C2_C4)"_ustr
); // B81
8328 m_pDoc
->SetString(1, 81, nSrcTab
, u
"=SUM(Range_C2_C4)"_ustr
); // B82
8329 m_pDoc
->SetString(1, 82, nSrcTab
, u
"=SUM(Range_C2_C4)"_ustr
); // B83
8331 m_pDoc
->SetString(0, 90, nSrcTab
, u
"=SUM($B$2:$C$4"_ustr
); // A91
8332 m_pDoc
->SetString(0, 91, nSrcTab
, u
"=SUM($B$2:$C$4"_ustr
); // A92
8333 m_pDoc
->SetString(0, 92, nSrcTab
, u
"=SUM($B$2:$C$4"_ustr
); // A93
8334 m_pDoc
->SetString(1, 90, nSrcTab
, u
"=SUM($B$2:$C$4"_ustr
); // B91
8335 m_pDoc
->SetString(1, 91, nSrcTab
, u
"=SUM($B$2:$C$4"_ustr
); // B92
8336 m_pDoc
->SetString(1, 92, nSrcTab
, u
"=SUM($B$2:$C$4"_ustr
); // B93
8338 m_pDoc
->SetString(0, 100, nSrcTab
, u
"=SUM(Range_B2_C4"_ustr
); // A101
8339 m_pDoc
->SetString(0, 101, nSrcTab
, u
"=SUM(Range_B2_C4"_ustr
); // A102
8340 m_pDoc
->SetString(0, 102, nSrcTab
, u
"=SUM(Range_B2_C4"_ustr
); // A103
8341 m_pDoc
->SetString(1, 100, nSrcTab
, u
"=SUM(Range_B2_C4"_ustr
); // B101
8342 m_pDoc
->SetString(1, 101, nSrcTab
, u
"=SUM(Range_B2_C4"_ustr
); // B102
8343 m_pDoc
->SetString(1, 102, nSrcTab
, u
"=SUM(Range_B2_C4"_ustr
); // B103
8345 for (int i
= nSrcTab
+ 1; i
< nDestTab
; ++i
)
8346 m_pDoc
->InsertTab(i
, "Empty Tab " + OUString::number(i
));
8348 if (nSrcTab
< nDestTab
)
8349 m_pDoc
->InsertTab(nDestTab
, u
"Dest"_ustr
);
8350 else if (nSrcTab
> nDestTab
)
8351 m_pDoc
->RenameTab(nDestTab
, u
"Dest"_ustr
);
8353 int nTabCount
= m_pDoc
->GetTableCount();
8354 for (int i
= nTabCount
; i
< nTabCount
+ 2; ++i
)
8355 m_pDoc
->InsertTab(i
, "Empty Tab " + OUString::number(i
));
8356 nTabCount
= m_pDoc
->GetTableCount();
8358 // References to the dest range
8359 OUString
aFBase(u
"="_ustr
);
8360 if (nSrcTab
!= nDestTab
)
8363 m_pDoc
->SetString(0, 112, nSrcTab
, OUString(aFBase
+ "C12"));
8364 m_pDoc
->SetString(0, 113, nSrcTab
, OUString(aFBase
+ "C13"));
8365 m_pDoc
->SetString(0, 114, nSrcTab
, OUString(aFBase
+ "C14"));
8366 m_pDoc
->SetString(1, 112, nSrcTab
, OUString(aFBase
+ "D12"));
8367 m_pDoc
->SetString(1, 113, nSrcTab
, OUString(aFBase
+ "D13"));
8368 m_pDoc
->SetString(1, 114, nSrcTab
, OUString(aFBase
+ "D14"));
8369 m_pDoc
->SetString(2, 112, nSrcTab
, OUString(aFBase
+ "E12"));
8370 m_pDoc
->SetString(2, 113, nSrcTab
, OUString(aFBase
+ "E13"));
8371 m_pDoc
->SetString(2, 114, nSrcTab
, OUString(aFBase
+ "E14"));
8373 // Check precondition
8374 checkReferencedCutRangesColIntitial(nSrcTab
, nDestTab
, u
"Initial"_ustr
);
8376 // Cut values B2:B4 to the clip document.
8377 ScDocument
aClipDoc(SCDOCMODE_CLIP
);
8378 ScRange
aSrcRange(1, 1, nSrcTab
, 1, 3, nSrcTab
);
8379 ScMarkData
aSrcMark(m_pDoc
->GetSheetLimits());
8380 aSrcMark
.SetMarkArea(aSrcRange
);
8382 pUndoCut
.reset(cutToClip(*m_xDocShell
, aSrcRange
, &aClipDoc
, bUndo
));
8384 InsertDeleteFlags
aFlags(InsertDeleteFlags::ALL
);
8386 ScDocumentUniquePtr pPasteUndoDoc
;
8387 std::unique_ptr
<ScDocument
> pPasteRefUndoDoc
;
8388 std::unique_ptr
<ScRefUndoData
> pUndoData
;
8391 ScMarkData
aDestMark(m_pDoc
->GetSheetLimits());
8396 aDestRange
= ScRange(2, 11, nDestTab
, 4, 11, nDestTab
);
8397 aDestMark
.SetMarkArea(aDestRange
);
8400 prepareUndoBeforePaste(true, pPasteUndoDoc
, pPasteRefUndoDoc
, aDestMark
, aDestRange
,
8404 ScDocument
* pOrigClipDoc
= &aClipDoc
;
8405 ScDocumentUniquePtr
pTransClip(new ScDocument(SCDOCMODE_CLIP
));
8406 aClipDoc
.TransposeClip(pTransClip
.get(), aFlags
, false, true);
8408 m_pDoc
->CopyFromClip(aDestRange
, aDestMark
, aFlags
, pPasteRefUndoDoc
.get(),
8409 pTransClip
.get(), true, false, true, false);
8410 printValuesAndFormulasInRange(m_pDoc
, ScRange(0, 20, nSrcTab
, 2, 21, nSrcTab
),
8411 "Relative references after copy"_ostr
);
8413 m_pDoc
->UpdateTranspose(aDestRange
.aStart
, pOrigClipDoc
, aDestMark
, pPasteRefUndoDoc
.get());
8414 printValuesAndFormulasInRange(m_pDoc
, ScRange(0, 20, nSrcTab
, 2, 21, nSrcTab
),
8415 "Relative references after UpdateTranspose"_ostr
);
8421 aDestRange
= ScRange(2, 11, nDestTab
, 2, 13, nDestTab
);
8422 // aDestMark = ScMarkData(m_pDoc->GetSheetLimits());
8424 aDestMark
.SetMarkArea(aDestRange
);
8427 prepareUndoBeforePaste(true, pPasteUndoDoc
, pPasteRefUndoDoc
, aDestMark
, aDestRange
,
8430 m_pDoc
->CopyFromClip(aDestRange
, aDestMark
, aFlags
, pPasteRefUndoDoc
.get(), &aClipDoc
, true,
8431 false, false, false);
8435 prepareUndoAfterPaste(pPasteUndoDoc
, pPasteRefUndoDoc
, aDestMark
, aDestRange
, pUndoData
,
8436 pUndoPaste
, bTransposed
);
8439 void TestCopyPaste::checkReferencedCutRangesCol(const SCTAB nSrcTab
, const SCTAB nDestTab
)
8441 // Cut B2:B4 and pasted to C12:C14
8443 OUString
aFBase(u
"="_ustr
);
8444 if (nSrcTab
!= nDestTab
)
8448 CPPUNIT_ASSERT_EQUAL(01.0, m_pDoc
->GetValue(2, 11, nDestTab
)); // C12
8449 CPPUNIT_ASSERT_EQUAL(11.0, m_pDoc
->GetValue(2, 12, nDestTab
)); // C13
8450 CPPUNIT_ASSERT_EQUAL(21.0, m_pDoc
->GetValue(2, 13, nDestTab
)); // C14
8451 CPPUNIT_ASSERT_EQUAL(02.0, m_pDoc
->GetValue(2, 1, nSrcTab
)); // C2
8452 CPPUNIT_ASSERT_EQUAL(12.0, m_pDoc
->GetValue(2, 2, nSrcTab
)); // C3
8453 CPPUNIT_ASSERT_EQUAL(22.0, m_pDoc
->GetValue(2, 3, nSrcTab
)); // C4
8456 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(0, 0, nSrcTab
)); // A1
8457 CPPUNIT_ASSERT_EQUAL(1001.0, m_pDoc
->GetValue(0, 1, nSrcTab
)); // A2
8458 CPPUNIT_ASSERT_EQUAL(1002.0, m_pDoc
->GetValue(0, 2, nSrcTab
)); // A3
8459 CPPUNIT_ASSERT_EQUAL(1003.0, m_pDoc
->GetValue(0, 3, nSrcTab
)); // A4
8460 CPPUNIT_ASSERT_EQUAL(1004.0, m_pDoc
->GetValue(0, 4, nSrcTab
)); // A5
8461 CPPUNIT_ASSERT_EQUAL(1010.0, m_pDoc
->GetValue(1, 0, nSrcTab
)); // B1
8462 CPPUNIT_ASSERT_EQUAL(1014.0, m_pDoc
->GetValue(1, 4, nSrcTab
)); // B5
8463 CPPUNIT_ASSERT_EQUAL(1020.0, m_pDoc
->GetValue(2, 0, nSrcTab
)); // C1
8464 CPPUNIT_ASSERT_EQUAL(1024.0, m_pDoc
->GetValue(2, 4, nSrcTab
)); // C5
8465 CPPUNIT_ASSERT_EQUAL(1030.0, m_pDoc
->GetValue(3, 0, nSrcTab
)); // D1
8466 CPPUNIT_ASSERT_EQUAL(1031.0, m_pDoc
->GetValue(3, 1, nSrcTab
)); // D2
8467 CPPUNIT_ASSERT_EQUAL(1032.0, m_pDoc
->GetValue(3, 2, nSrcTab
)); // D3
8468 CPPUNIT_ASSERT_EQUAL(1033.0, m_pDoc
->GetValue(3, 3, nSrcTab
)); // D4
8469 CPPUNIT_ASSERT_EQUAL(1034.0, m_pDoc
->GetValue(3, 4, nSrcTab
)); // D5
8470 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(20, 0, nSrcTab
)); // U1
8471 CPPUNIT_ASSERT_EQUAL(1001.0, m_pDoc
->GetValue(20, 1, nSrcTab
)); // U2
8472 CPPUNIT_ASSERT_EQUAL(1002.0, m_pDoc
->GetValue(20, 2, nSrcTab
)); // U3
8473 CPPUNIT_ASSERT_EQUAL(1003.0, m_pDoc
->GetValue(20, 3, nSrcTab
)); // U4
8474 CPPUNIT_ASSERT_EQUAL(1004.0, m_pDoc
->GetValue(20, 4, nSrcTab
)); // U5
8475 CPPUNIT_ASSERT_EQUAL(1010.0, m_pDoc
->GetValue(21, 0, nSrcTab
)); // V1
8476 CPPUNIT_ASSERT_EQUAL(1014.0, m_pDoc
->GetValue(21, 4, nSrcTab
)); // V5
8477 CPPUNIT_ASSERT_EQUAL(1020.0, m_pDoc
->GetValue(22, 0, nSrcTab
)); // W1
8478 CPPUNIT_ASSERT_EQUAL(1024.0, m_pDoc
->GetValue(22, 4, nSrcTab
)); // W5
8479 CPPUNIT_ASSERT_EQUAL(1030.0, m_pDoc
->GetValue(23, 0, nSrcTab
)); // X1
8480 CPPUNIT_ASSERT_EQUAL(1031.0, m_pDoc
->GetValue(23, 1, nSrcTab
)); // X2
8481 CPPUNIT_ASSERT_EQUAL(1032.0, m_pDoc
->GetValue(23, 2, nSrcTab
)); // X3
8482 CPPUNIT_ASSERT_EQUAL(1033.0, m_pDoc
->GetValue(23, 3, nSrcTab
)); // X4
8483 CPPUNIT_ASSERT_EQUAL(1034.0, m_pDoc
->GetValue(23, 4, nSrcTab
)); // X5
8484 CPPUNIT_ASSERT_EQUAL(u
"=A1"_ustr
, m_pDoc
->GetFormula(20, 0, nSrcTab
)); // U1
8485 CPPUNIT_ASSERT_EQUAL(u
"=A2"_ustr
, m_pDoc
->GetFormula(20, 1, nSrcTab
)); // U2
8486 CPPUNIT_ASSERT_EQUAL(u
"=A3"_ustr
, m_pDoc
->GetFormula(20, 2, nSrcTab
)); // U3
8487 CPPUNIT_ASSERT_EQUAL(u
"=A4"_ustr
, m_pDoc
->GetFormula(20, 3, nSrcTab
)); // U4
8488 CPPUNIT_ASSERT_EQUAL(u
"=A5"_ustr
, m_pDoc
->GetFormula(20, 4, nSrcTab
)); // U5
8489 CPPUNIT_ASSERT_EQUAL(u
"=B1"_ustr
, m_pDoc
->GetFormula(21, 0, nSrcTab
)); // V1
8490 CPPUNIT_ASSERT_EQUAL(u
"=B5"_ustr
, m_pDoc
->GetFormula(21, 4, nSrcTab
)); // V5
8491 CPPUNIT_ASSERT_EQUAL(u
"=C1"_ustr
, m_pDoc
->GetFormula(22, 0, nSrcTab
)); // W1
8492 CPPUNIT_ASSERT_EQUAL(u
"=C5"_ustr
, m_pDoc
->GetFormula(22, 4, nSrcTab
)); // W5
8493 CPPUNIT_ASSERT_EQUAL(u
"=D1"_ustr
, m_pDoc
->GetFormula(23, 0, nSrcTab
)); // X1
8494 CPPUNIT_ASSERT_EQUAL(u
"=D2"_ustr
, m_pDoc
->GetFormula(23, 1, nSrcTab
)); // X2
8495 CPPUNIT_ASSERT_EQUAL(u
"=D3"_ustr
, m_pDoc
->GetFormula(23, 2, nSrcTab
)); // X3
8496 CPPUNIT_ASSERT_EQUAL(u
"=D4"_ustr
, m_pDoc
->GetFormula(23, 3, nSrcTab
)); // X4
8497 CPPUNIT_ASSERT_EQUAL(u
"=D5"_ustr
, m_pDoc
->GetFormula(23, 4, nSrcTab
)); // X5
8499 // Note: Values (mostly) remain the same
8501 CPPUNIT_ASSERT_EQUAL(OUString(aFBase
+ "C12"), m_pDoc
->GetFormula(0, 20, nSrcTab
)); // A21
8502 CPPUNIT_ASSERT_EQUAL(OUString(aFBase
+ "C13"), m_pDoc
->GetFormula(0, 21, nSrcTab
)); // A22
8503 CPPUNIT_ASSERT_EQUAL(OUString(aFBase
+ "C14"), m_pDoc
->GetFormula(0, 22, nSrcTab
)); // A23
8504 CPPUNIT_ASSERT_EQUAL(u
"=C2"_ustr
, m_pDoc
->GetFormula(1, 20, nSrcTab
)); // B21
8505 CPPUNIT_ASSERT_EQUAL(u
"=C3"_ustr
, m_pDoc
->GetFormula(1, 21, nSrcTab
)); // B22
8506 CPPUNIT_ASSERT_EQUAL(u
"=C4"_ustr
, m_pDoc
->GetFormula(1, 22, nSrcTab
)); // B23
8507 CPPUNIT_ASSERT_EQUAL(01.0, m_pDoc
->GetValue(0, 20, nSrcTab
));
8508 CPPUNIT_ASSERT_EQUAL(11.0, m_pDoc
->GetValue(0, 21, nSrcTab
));
8509 CPPUNIT_ASSERT_EQUAL(21.0, m_pDoc
->GetValue(0, 22, nSrcTab
));
8510 CPPUNIT_ASSERT_EQUAL(02.0, m_pDoc
->GetValue(1, 20, nSrcTab
));
8511 CPPUNIT_ASSERT_EQUAL(12.0, m_pDoc
->GetValue(1, 21, nSrcTab
));
8512 CPPUNIT_ASSERT_EQUAL(22.0, m_pDoc
->GetValue(1, 22, nSrcTab
));
8514 CPPUNIT_ASSERT_EQUAL(OUString(aFBase
+ "$C$12"), m_pDoc
->GetFormula(0, 30, nSrcTab
)); // A31
8515 CPPUNIT_ASSERT_EQUAL(OUString(aFBase
+ "$C$13"), m_pDoc
->GetFormula(0, 31, nSrcTab
)); // A32
8516 CPPUNIT_ASSERT_EQUAL(OUString(aFBase
+ "$C$14"), m_pDoc
->GetFormula(0, 32, nSrcTab
)); // A33
8517 CPPUNIT_ASSERT_EQUAL(u
"=$C$2"_ustr
, m_pDoc
->GetFormula(1, 30, nSrcTab
)); // B31
8518 CPPUNIT_ASSERT_EQUAL(u
"=$C$3"_ustr
, m_pDoc
->GetFormula(1, 31, nSrcTab
)); // B32
8519 CPPUNIT_ASSERT_EQUAL(u
"=$C$4"_ustr
, m_pDoc
->GetFormula(1, 32, nSrcTab
)); // B33
8520 CPPUNIT_ASSERT_EQUAL(01.0, m_pDoc
->GetValue(0, 30, nSrcTab
));
8521 CPPUNIT_ASSERT_EQUAL(11.0, m_pDoc
->GetValue(0, 31, nSrcTab
));
8522 CPPUNIT_ASSERT_EQUAL(21.0, m_pDoc
->GetValue(0, 32, nSrcTab
));
8523 CPPUNIT_ASSERT_EQUAL(02.0, m_pDoc
->GetValue(1, 30, nSrcTab
));
8524 CPPUNIT_ASSERT_EQUAL(12.0, m_pDoc
->GetValue(1, 31, nSrcTab
));
8525 CPPUNIT_ASSERT_EQUAL(22.0, m_pDoc
->GetValue(1, 32, nSrcTab
));
8527 CPPUNIT_ASSERT_EQUAL(nSrcTab
!= nDestTab
? u
"$Dest.$C$12"_ustr
: u
"$Test.$C$12"_ustr
,
8528 getRangeByName(u
"Range_B2"_ustr
));
8529 CPPUNIT_ASSERT_EQUAL(nSrcTab
!= nDestTab
? u
"$Dest.$C$13"_ustr
: u
"$Test.$C$13"_ustr
,
8530 getRangeByName(u
"Range_B3"_ustr
));
8531 CPPUNIT_ASSERT_EQUAL(nSrcTab
!= nDestTab
? u
"$Dest.$C$14"_ustr
: u
"$Test.$C$14"_ustr
,
8532 getRangeByName(u
"Range_B4"_ustr
));
8533 CPPUNIT_ASSERT_EQUAL(u
"$Test.$C$2"_ustr
, getRangeByName(u
"Range_C2"_ustr
));
8534 CPPUNIT_ASSERT_EQUAL(u
"$Test.$C$3"_ustr
, getRangeByName(u
"Range_C3"_ustr
));
8535 CPPUNIT_ASSERT_EQUAL(u
"$Test.$C$4"_ustr
, getRangeByName(u
"Range_C4"_ustr
));
8536 CPPUNIT_ASSERT_EQUAL(nSrcTab
!= nDestTab
? u
"$Dest.$C$12:$C$14"_ustr
8537 : u
"$Test.$C$12:$C$14"_ustr
,
8538 getRangeByName(u
"Range_B2_B4"_ustr
));
8539 CPPUNIT_ASSERT_EQUAL(u
"$Test.$C$2:$C$4"_ustr
, getRangeByName(u
"Range_C2_C4"_ustr
));
8540 CPPUNIT_ASSERT_EQUAL(u
"$Test.$B$2:$C$4"_ustr
, getRangeByName(u
"Range_B2_C4"_ustr
));
8541 CPPUNIT_ASSERT_EQUAL(u
"B2"_ustr
, getRangeByName(u
"RelRange_Cm20_R0"_ustr
));
8543 CPPUNIT_ASSERT_EQUAL(u
"=Range_B2"_ustr
, m_pDoc
->GetFormula(0, 40, nSrcTab
)); // A41
8544 CPPUNIT_ASSERT_EQUAL(u
"=Range_B3"_ustr
, m_pDoc
->GetFormula(0, 41, nSrcTab
)); // A42
8545 CPPUNIT_ASSERT_EQUAL(u
"=Range_B4"_ustr
, m_pDoc
->GetFormula(0, 42, nSrcTab
)); // A43
8546 CPPUNIT_ASSERT_EQUAL(u
"=Range_C2"_ustr
, m_pDoc
->GetFormula(1, 40, nSrcTab
)); // B41
8547 CPPUNIT_ASSERT_EQUAL(u
"=Range_C3"_ustr
, m_pDoc
->GetFormula(1, 41, nSrcTab
)); // B42
8548 CPPUNIT_ASSERT_EQUAL(u
"=Range_C4"_ustr
, m_pDoc
->GetFormula(1, 42, nSrcTab
)); // B43
8549 CPPUNIT_ASSERT_EQUAL(01.0, m_pDoc
->GetValue(0, 40, nSrcTab
));
8550 CPPUNIT_ASSERT_EQUAL(11.0, m_pDoc
->GetValue(0, 41, nSrcTab
));
8551 CPPUNIT_ASSERT_EQUAL(21.0, m_pDoc
->GetValue(0, 42, nSrcTab
));
8552 CPPUNIT_ASSERT_EQUAL(02.0, m_pDoc
->GetValue(1, 40, nSrcTab
));
8553 CPPUNIT_ASSERT_EQUAL(12.0, m_pDoc
->GetValue(1, 41, nSrcTab
));
8554 CPPUNIT_ASSERT_EQUAL(22.0, m_pDoc
->GetValue(1, 42, nSrcTab
));
8556 CPPUNIT_ASSERT_EQUAL(u
"=RelRange_Cm20_R0"_ustr
, m_pDoc
->GetFormula(0, 50, nSrcTab
)); // A51
8557 CPPUNIT_ASSERT_EQUAL(u
"=RelRange_Cm20_R0"_ustr
, m_pDoc
->GetFormula(0, 51, nSrcTab
)); // A52
8558 CPPUNIT_ASSERT_EQUAL(u
"=RelRange_Cm20_R0"_ustr
, m_pDoc
->GetFormula(0, 52, nSrcTab
)); // A53
8559 CPPUNIT_ASSERT_EQUAL(u
"=RelRange_Cm20_R0"_ustr
, m_pDoc
->GetFormula(1, 50, nSrcTab
)); // B51
8560 CPPUNIT_ASSERT_EQUAL(u
"=RelRange_Cm20_R0"_ustr
, m_pDoc
->GetFormula(1, 51, nSrcTab
)); // B52
8561 CPPUNIT_ASSERT_EQUAL(u
"=RelRange_Cm20_R0"_ustr
, m_pDoc
->GetFormula(1, 52, nSrcTab
)); // B53
8562 CPPUNIT_ASSERT_EQUAL(01.0, m_pDoc
->GetValue(0, 50, nSrcTab
));
8563 CPPUNIT_ASSERT_EQUAL(11.0, m_pDoc
->GetValue(0, 51, nSrcTab
));
8564 CPPUNIT_ASSERT_EQUAL(21.0, m_pDoc
->GetValue(0, 52, nSrcTab
));
8565 CPPUNIT_ASSERT_EQUAL(02.0, m_pDoc
->GetValue(1, 50, nSrcTab
));
8566 CPPUNIT_ASSERT_EQUAL(12.0, m_pDoc
->GetValue(1, 51, nSrcTab
));
8567 CPPUNIT_ASSERT_EQUAL(22.0, m_pDoc
->GetValue(1, 52, nSrcTab
));
8569 CPPUNIT_ASSERT_EQUAL(nSrcTab
!= nDestTab
? u
"=SUM(Dest.C12:C14)"_ustr
: u
"=SUM(C12:C14)"_ustr
,
8570 m_pDoc
->GetFormula(0, 60, nSrcTab
)); // A61
8571 CPPUNIT_ASSERT_EQUAL(nSrcTab
!= nDestTab
? u
"=SUM(Dest.C12:C14)"_ustr
: u
"=SUM(C12:C14)"_ustr
,
8572 m_pDoc
->GetFormula(0, 61, nSrcTab
)); // A62
8573 CPPUNIT_ASSERT_EQUAL(nSrcTab
!= nDestTab
? u
"=SUM(Dest.C12:C14)"_ustr
: u
"=SUM(C12:C14)"_ustr
,
8574 m_pDoc
->GetFormula(0, 62, nSrcTab
)); // A63
8575 CPPUNIT_ASSERT_EQUAL(u
"=SUM(C2:C4)"_ustr
, m_pDoc
->GetFormula(1, 60, nSrcTab
)); // B61
8576 CPPUNIT_ASSERT_EQUAL(u
"=SUM(C2:C4)"_ustr
, m_pDoc
->GetFormula(1, 61, nSrcTab
)); // B62
8577 CPPUNIT_ASSERT_EQUAL(u
"=SUM(C2:C4)"_ustr
, m_pDoc
->GetFormula(1, 62, nSrcTab
)); // B63
8578 CPPUNIT_ASSERT_EQUAL(33.0, m_pDoc
->GetValue(0, 60, nSrcTab
));
8579 CPPUNIT_ASSERT_EQUAL(33.0, m_pDoc
->GetValue(0, 61, nSrcTab
));
8580 CPPUNIT_ASSERT_EQUAL(33.0, m_pDoc
->GetValue(0, 62, nSrcTab
));
8581 CPPUNIT_ASSERT_EQUAL(36.0, m_pDoc
->GetValue(1, 60, nSrcTab
));
8582 CPPUNIT_ASSERT_EQUAL(36.0, m_pDoc
->GetValue(1, 61, nSrcTab
));
8583 CPPUNIT_ASSERT_EQUAL(36.0, m_pDoc
->GetValue(1, 62, nSrcTab
));
8585 CPPUNIT_ASSERT_EQUAL(nSrcTab
!= nDestTab
? u
"=SUM(Dest.$C$12:$C$14)"_ustr
8586 : u
"=SUM($C$12:$C$14)"_ustr
,
8587 m_pDoc
->GetFormula(0, 70, nSrcTab
)); // A71
8588 CPPUNIT_ASSERT_EQUAL(nSrcTab
!= nDestTab
? u
"=SUM(Dest.$C$12:$C$14)"_ustr
8589 : u
"=SUM($C$12:$C$14)"_ustr
,
8590 m_pDoc
->GetFormula(0, 71, nSrcTab
)); // A72
8591 CPPUNIT_ASSERT_EQUAL(nSrcTab
!= nDestTab
? u
"=SUM(Dest.$C$12:$C$14)"_ustr
8592 : u
"=SUM($C$12:$C$14)"_ustr
,
8593 m_pDoc
->GetFormula(0, 72, nSrcTab
)); // A73
8594 CPPUNIT_ASSERT_EQUAL(u
"=SUM($C$2:$C$4)"_ustr
, m_pDoc
->GetFormula(1, 70, nSrcTab
)); // B71
8595 CPPUNIT_ASSERT_EQUAL(u
"=SUM($C$2:$C$4)"_ustr
, m_pDoc
->GetFormula(1, 71, nSrcTab
)); // B72
8596 CPPUNIT_ASSERT_EQUAL(u
"=SUM($C$2:$C$4)"_ustr
, m_pDoc
->GetFormula(1, 72, nSrcTab
)); // B73
8597 CPPUNIT_ASSERT_EQUAL(33.0, m_pDoc
->GetValue(0, 70, nSrcTab
));
8598 CPPUNIT_ASSERT_EQUAL(33.0, m_pDoc
->GetValue(0, 71, nSrcTab
));
8599 CPPUNIT_ASSERT_EQUAL(33.0, m_pDoc
->GetValue(0, 72, nSrcTab
));
8600 CPPUNIT_ASSERT_EQUAL(36.0, m_pDoc
->GetValue(1, 70, nSrcTab
));
8601 CPPUNIT_ASSERT_EQUAL(36.0, m_pDoc
->GetValue(1, 71, nSrcTab
));
8602 CPPUNIT_ASSERT_EQUAL(36.0, m_pDoc
->GetValue(1, 72, nSrcTab
));
8604 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_B2_B4)"_ustr
, m_pDoc
->GetFormula(0, 80, nSrcTab
)); // A81
8605 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_B2_B4)"_ustr
, m_pDoc
->GetFormula(0, 81, nSrcTab
)); // A82
8606 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_B2_B4)"_ustr
, m_pDoc
->GetFormula(0, 82, nSrcTab
)); // A83
8607 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_C2_C4)"_ustr
, m_pDoc
->GetFormula(1, 80, nSrcTab
)); // B81
8608 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_C2_C4)"_ustr
, m_pDoc
->GetFormula(1, 81, nSrcTab
)); // B82
8609 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_C2_C4)"_ustr
, m_pDoc
->GetFormula(1, 82, nSrcTab
)); // B83
8610 CPPUNIT_ASSERT_EQUAL(33.0, m_pDoc
->GetValue(0, 80, nSrcTab
));
8611 CPPUNIT_ASSERT_EQUAL(33.0, m_pDoc
->GetValue(0, 81, nSrcTab
));
8612 CPPUNIT_ASSERT_EQUAL(33.0, m_pDoc
->GetValue(0, 82, nSrcTab
));
8613 CPPUNIT_ASSERT_EQUAL(36.0, m_pDoc
->GetValue(1, 80, nSrcTab
));
8614 CPPUNIT_ASSERT_EQUAL(36.0, m_pDoc
->GetValue(1, 81, nSrcTab
));
8615 CPPUNIT_ASSERT_EQUAL(36.0, m_pDoc
->GetValue(1, 82, nSrcTab
));
8617 CPPUNIT_ASSERT_EQUAL(u
"=SUM($B$2:$C$4)"_ustr
, m_pDoc
->GetFormula(0, 90, nSrcTab
)); // A91
8618 CPPUNIT_ASSERT_EQUAL(u
"=SUM($B$2:$C$4)"_ustr
, m_pDoc
->GetFormula(0, 91, nSrcTab
)); // A92
8619 CPPUNIT_ASSERT_EQUAL(u
"=SUM($B$2:$C$4)"_ustr
, m_pDoc
->GetFormula(0, 92, nSrcTab
)); // A93
8620 CPPUNIT_ASSERT_EQUAL(u
"=SUM($B$2:$C$4)"_ustr
, m_pDoc
->GetFormula(1, 90, nSrcTab
)); // B91
8621 CPPUNIT_ASSERT_EQUAL(u
"=SUM($B$2:$C$4)"_ustr
, m_pDoc
->GetFormula(1, 91, nSrcTab
)); // B92
8622 CPPUNIT_ASSERT_EQUAL(u
"=SUM($B$2:$C$4)"_ustr
, m_pDoc
->GetFormula(1, 92, nSrcTab
)); // B93
8623 CPPUNIT_ASSERT_EQUAL(36.0, m_pDoc
->GetValue(0, 90, nSrcTab
));
8624 CPPUNIT_ASSERT_EQUAL(36.0, m_pDoc
->GetValue(0, 91, nSrcTab
));
8625 CPPUNIT_ASSERT_EQUAL(36.0, m_pDoc
->GetValue(0, 92, nSrcTab
));
8626 CPPUNIT_ASSERT_EQUAL(36.0, m_pDoc
->GetValue(1, 90, nSrcTab
));
8627 CPPUNIT_ASSERT_EQUAL(36.0, m_pDoc
->GetValue(1, 91, nSrcTab
));
8628 CPPUNIT_ASSERT_EQUAL(36.0, m_pDoc
->GetValue(1, 92, nSrcTab
));
8630 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_B2_C4)"_ustr
, m_pDoc
->GetFormula(0, 100, nSrcTab
)); // A101
8631 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_B2_C4)"_ustr
, m_pDoc
->GetFormula(0, 101, nSrcTab
)); // A102
8632 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_B2_C4)"_ustr
, m_pDoc
->GetFormula(0, 102, nSrcTab
)); // A103
8633 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_B2_C4)"_ustr
, m_pDoc
->GetFormula(1, 100, nSrcTab
)); // B101
8634 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_B2_C4)"_ustr
, m_pDoc
->GetFormula(1, 101, nSrcTab
)); // B102
8635 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_B2_C4)"_ustr
, m_pDoc
->GetFormula(1, 102, nSrcTab
)); // B103
8636 CPPUNIT_ASSERT_EQUAL(36.0, m_pDoc
->GetValue(0, 100, nSrcTab
));
8637 CPPUNIT_ASSERT_EQUAL(36.0, m_pDoc
->GetValue(0, 101, nSrcTab
));
8638 CPPUNIT_ASSERT_EQUAL(36.0, m_pDoc
->GetValue(0, 102, nSrcTab
));
8639 CPPUNIT_ASSERT_EQUAL(36.0, m_pDoc
->GetValue(1, 100, nSrcTab
));
8640 CPPUNIT_ASSERT_EQUAL(36.0, m_pDoc
->GetValue(1, 101, nSrcTab
));
8641 CPPUNIT_ASSERT_EQUAL(36.0, m_pDoc
->GetValue(1, 102, nSrcTab
));
8643 // Existing references to the destination range must not change
8644 CPPUNIT_ASSERT_EQUAL(OUString(aFBase
+ "C12"), m_pDoc
->GetFormula(0, 112, nSrcTab
));
8645 CPPUNIT_ASSERT_EQUAL(OUString(aFBase
+ "C13"), m_pDoc
->GetFormula(0, 113, nSrcTab
));
8646 CPPUNIT_ASSERT_EQUAL(OUString(aFBase
+ "C14"), m_pDoc
->GetFormula(0, 114, nSrcTab
));
8647 CPPUNIT_ASSERT_EQUAL(OUString(aFBase
+ "D12"), m_pDoc
->GetFormula(1, 112, nSrcTab
));
8648 CPPUNIT_ASSERT_EQUAL(OUString(aFBase
+ "D13"), m_pDoc
->GetFormula(1, 113, nSrcTab
));
8649 CPPUNIT_ASSERT_EQUAL(OUString(aFBase
+ "D14"), m_pDoc
->GetFormula(1, 114, nSrcTab
));
8650 CPPUNIT_ASSERT_EQUAL(OUString(aFBase
+ "E12"), m_pDoc
->GetFormula(2, 112, nSrcTab
));
8651 CPPUNIT_ASSERT_EQUAL(OUString(aFBase
+ "E13"), m_pDoc
->GetFormula(2, 113, nSrcTab
));
8652 CPPUNIT_ASSERT_EQUAL(OUString(aFBase
+ "E14"), m_pDoc
->GetFormula(2, 114, nSrcTab
));
8655 void TestCopyPaste::checkReferencedCutTransposedRangesCol(const SCTAB nSrcTab
, const SCTAB nDestTab
)
8657 // Cut B2:D2 and pasted transposed to C12:E12
8659 OUString
aFBase(u
"="_ustr
);
8660 if (nSrcTab
!= nDestTab
)
8664 CPPUNIT_ASSERT_EQUAL(01.0, m_pDoc
->GetValue(2, 11, nDestTab
)); // C12
8665 CPPUNIT_ASSERT_EQUAL(11.0, m_pDoc
->GetValue(3, 11, nDestTab
)); // D12
8666 CPPUNIT_ASSERT_EQUAL(21.0, m_pDoc
->GetValue(4, 11, nDestTab
)); // E12
8667 CPPUNIT_ASSERT_EQUAL(02.0, m_pDoc
->GetValue(2, 1, nSrcTab
)); // C2
8668 CPPUNIT_ASSERT_EQUAL(12.0, m_pDoc
->GetValue(2, 2, nSrcTab
)); // C3
8669 CPPUNIT_ASSERT_EQUAL(22.0, m_pDoc
->GetValue(2, 3, nSrcTab
)); // C4
8672 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(0, 0, nSrcTab
)); // A1
8673 CPPUNIT_ASSERT_EQUAL(1001.0, m_pDoc
->GetValue(0, 1, nSrcTab
)); // A2
8674 CPPUNIT_ASSERT_EQUAL(1002.0, m_pDoc
->GetValue(0, 2, nSrcTab
)); // A3
8675 CPPUNIT_ASSERT_EQUAL(1003.0, m_pDoc
->GetValue(0, 3, nSrcTab
)); // A4
8676 CPPUNIT_ASSERT_EQUAL(1004.0, m_pDoc
->GetValue(0, 4, nSrcTab
)); // A5
8677 CPPUNIT_ASSERT_EQUAL(1010.0, m_pDoc
->GetValue(1, 0, nSrcTab
)); // B1
8678 CPPUNIT_ASSERT_EQUAL(1014.0, m_pDoc
->GetValue(1, 4, nSrcTab
)); // B5
8679 CPPUNIT_ASSERT_EQUAL(1020.0, m_pDoc
->GetValue(2, 0, nSrcTab
)); // C1
8680 CPPUNIT_ASSERT_EQUAL(1024.0, m_pDoc
->GetValue(2, 4, nSrcTab
)); // C5
8681 CPPUNIT_ASSERT_EQUAL(1030.0, m_pDoc
->GetValue(3, 0, nSrcTab
)); // D1
8682 CPPUNIT_ASSERT_EQUAL(1031.0, m_pDoc
->GetValue(3, 1, nSrcTab
)); // D2
8683 CPPUNIT_ASSERT_EQUAL(1032.0, m_pDoc
->GetValue(3, 2, nSrcTab
)); // D3
8684 CPPUNIT_ASSERT_EQUAL(1033.0, m_pDoc
->GetValue(3, 3, nSrcTab
)); // D4
8685 CPPUNIT_ASSERT_EQUAL(1034.0, m_pDoc
->GetValue(3, 4, nSrcTab
)); // D5
8686 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(20, 0, nSrcTab
)); // U1
8687 CPPUNIT_ASSERT_EQUAL(1001.0, m_pDoc
->GetValue(20, 1, nSrcTab
)); // U2
8688 CPPUNIT_ASSERT_EQUAL(1002.0, m_pDoc
->GetValue(20, 2, nSrcTab
)); // U3
8689 CPPUNIT_ASSERT_EQUAL(1003.0, m_pDoc
->GetValue(20, 3, nSrcTab
)); // U4
8690 CPPUNIT_ASSERT_EQUAL(1004.0, m_pDoc
->GetValue(20, 4, nSrcTab
)); // U5
8691 CPPUNIT_ASSERT_EQUAL(1010.0, m_pDoc
->GetValue(21, 0, nSrcTab
)); // V1
8692 CPPUNIT_ASSERT_EQUAL(1014.0, m_pDoc
->GetValue(21, 4, nSrcTab
)); // V5
8693 CPPUNIT_ASSERT_EQUAL(1020.0, m_pDoc
->GetValue(22, 0, nSrcTab
)); // W1
8694 CPPUNIT_ASSERT_EQUAL(1024.0, m_pDoc
->GetValue(22, 4, nSrcTab
)); // W5
8695 CPPUNIT_ASSERT_EQUAL(1030.0, m_pDoc
->GetValue(23, 0, nSrcTab
)); // X1
8696 CPPUNIT_ASSERT_EQUAL(1031.0, m_pDoc
->GetValue(23, 1, nSrcTab
)); // X2
8697 CPPUNIT_ASSERT_EQUAL(1032.0, m_pDoc
->GetValue(23, 2, nSrcTab
)); // X3
8698 CPPUNIT_ASSERT_EQUAL(1033.0, m_pDoc
->GetValue(23, 3, nSrcTab
)); // X4
8699 CPPUNIT_ASSERT_EQUAL(1034.0, m_pDoc
->GetValue(23, 4, nSrcTab
)); // X5
8700 CPPUNIT_ASSERT_EQUAL(u
"=A1"_ustr
, m_pDoc
->GetFormula(20, 0, nSrcTab
)); // U1
8701 CPPUNIT_ASSERT_EQUAL(u
"=A2"_ustr
, m_pDoc
->GetFormula(20, 1, nSrcTab
)); // U2
8702 CPPUNIT_ASSERT_EQUAL(u
"=A3"_ustr
, m_pDoc
->GetFormula(20, 2, nSrcTab
)); // U3
8703 CPPUNIT_ASSERT_EQUAL(u
"=A4"_ustr
, m_pDoc
->GetFormula(20, 3, nSrcTab
)); // U4
8704 CPPUNIT_ASSERT_EQUAL(u
"=A5"_ustr
, m_pDoc
->GetFormula(20, 4, nSrcTab
)); // U5
8705 CPPUNIT_ASSERT_EQUAL(u
"=B1"_ustr
, m_pDoc
->GetFormula(21, 0, nSrcTab
)); // V1
8706 CPPUNIT_ASSERT_EQUAL(u
"=B5"_ustr
, m_pDoc
->GetFormula(21, 4, nSrcTab
)); // V5
8707 CPPUNIT_ASSERT_EQUAL(u
"=C1"_ustr
, m_pDoc
->GetFormula(22, 0, nSrcTab
)); // W1
8708 CPPUNIT_ASSERT_EQUAL(u
"=C5"_ustr
, m_pDoc
->GetFormula(22, 4, nSrcTab
)); // W5
8709 CPPUNIT_ASSERT_EQUAL(u
"=D1"_ustr
, m_pDoc
->GetFormula(23, 0, nSrcTab
)); // X1
8710 CPPUNIT_ASSERT_EQUAL(u
"=D2"_ustr
, m_pDoc
->GetFormula(23, 1, nSrcTab
)); // X2
8711 CPPUNIT_ASSERT_EQUAL(u
"=D3"_ustr
, m_pDoc
->GetFormula(23, 2, nSrcTab
)); // X3
8712 CPPUNIT_ASSERT_EQUAL(u
"=D4"_ustr
, m_pDoc
->GetFormula(23, 3, nSrcTab
)); // X4
8713 CPPUNIT_ASSERT_EQUAL(u
"=D5"_ustr
, m_pDoc
->GetFormula(23, 4, nSrcTab
)); // X5
8715 CPPUNIT_ASSERT_EQUAL(OUString(aFBase
+ "C12"), m_pDoc
->GetFormula(0, 20, nSrcTab
)); // A21
8716 CPPUNIT_ASSERT_EQUAL(OUString(aFBase
+ "D12"), m_pDoc
->GetFormula(0, 21, nSrcTab
)); // A22
8717 CPPUNIT_ASSERT_EQUAL(OUString(aFBase
+ "E12"), m_pDoc
->GetFormula(0, 22, nSrcTab
)); // A23
8718 CPPUNIT_ASSERT_EQUAL(u
"=C2"_ustr
, m_pDoc
->GetFormula(1, 20, nSrcTab
)); // B21
8719 CPPUNIT_ASSERT_EQUAL(u
"=C3"_ustr
, m_pDoc
->GetFormula(1, 21, nSrcTab
)); // B22
8720 CPPUNIT_ASSERT_EQUAL(u
"=C4"_ustr
, m_pDoc
->GetFormula(1, 22, nSrcTab
)); // B23
8721 CPPUNIT_ASSERT_EQUAL(01.0, m_pDoc
->GetValue(0, 20, nSrcTab
));
8722 CPPUNIT_ASSERT_EQUAL(11.0, m_pDoc
->GetValue(0, 21, nSrcTab
));
8723 CPPUNIT_ASSERT_EQUAL(21.0, m_pDoc
->GetValue(0, 22, nSrcTab
));
8724 CPPUNIT_ASSERT_EQUAL(02.0, m_pDoc
->GetValue(1, 20, nSrcTab
));
8725 CPPUNIT_ASSERT_EQUAL(12.0, m_pDoc
->GetValue(1, 21, nSrcTab
));
8726 CPPUNIT_ASSERT_EQUAL(22.0, m_pDoc
->GetValue(1, 22, nSrcTab
));
8728 CPPUNIT_ASSERT_EQUAL(OUString(aFBase
+ "$C$12"), m_pDoc
->GetFormula(0, 30, nSrcTab
)); // A31
8729 CPPUNIT_ASSERT_EQUAL(OUString(aFBase
+ "$D$12"), m_pDoc
->GetFormula(0, 31, nSrcTab
)); // A32
8730 CPPUNIT_ASSERT_EQUAL(OUString(aFBase
+ "$E$12"), m_pDoc
->GetFormula(0, 32, nSrcTab
)); // A33
8731 CPPUNIT_ASSERT_EQUAL(u
"=$C$2"_ustr
, m_pDoc
->GetFormula(1, 30, nSrcTab
)); // B31
8732 CPPUNIT_ASSERT_EQUAL(u
"=$C$3"_ustr
, m_pDoc
->GetFormula(1, 31, nSrcTab
)); // B32
8733 CPPUNIT_ASSERT_EQUAL(u
"=$C$4"_ustr
, m_pDoc
->GetFormula(1, 32, nSrcTab
)); // B33
8734 CPPUNIT_ASSERT_EQUAL(01.0, m_pDoc
->GetValue(0, 30, nSrcTab
));
8735 CPPUNIT_ASSERT_EQUAL(11.0, m_pDoc
->GetValue(0, 31, nSrcTab
));
8736 CPPUNIT_ASSERT_EQUAL(21.0, m_pDoc
->GetValue(0, 32, nSrcTab
));
8737 CPPUNIT_ASSERT_EQUAL(02.0, m_pDoc
->GetValue(1, 30, nSrcTab
));
8738 CPPUNIT_ASSERT_EQUAL(12.0, m_pDoc
->GetValue(1, 31, nSrcTab
));
8739 CPPUNIT_ASSERT_EQUAL(22.0, m_pDoc
->GetValue(1, 32, nSrcTab
));
8741 CPPUNIT_ASSERT_EQUAL(nSrcTab
!= nDestTab
? u
"$Dest.$C$12"_ustr
: u
"$Test.$C$12"_ustr
,
8742 getRangeByName(u
"Range_B2"_ustr
));
8743 CPPUNIT_ASSERT_EQUAL(nSrcTab
!= nDestTab
? u
"$Dest.$D$12"_ustr
: u
"$Test.$D$12"_ustr
,
8744 getRangeByName(u
"Range_B3"_ustr
));
8745 CPPUNIT_ASSERT_EQUAL(nSrcTab
!= nDestTab
? u
"$Dest.$E$12"_ustr
: u
"$Test.$E$12"_ustr
,
8746 getRangeByName(u
"Range_B4"_ustr
));
8747 CPPUNIT_ASSERT_EQUAL(u
"$Test.$C$2"_ustr
, getRangeByName(u
"Range_C2"_ustr
));
8748 CPPUNIT_ASSERT_EQUAL(u
"$Test.$C$3"_ustr
, getRangeByName(u
"Range_C3"_ustr
));
8749 CPPUNIT_ASSERT_EQUAL(u
"$Test.$C$4"_ustr
, getRangeByName(u
"Range_C4"_ustr
));
8750 CPPUNIT_ASSERT_EQUAL(nSrcTab
!= nDestTab
? u
"$Dest.$C$12:$E$12"_ustr
8751 : u
"$Test.$C$12:$E$12"_ustr
,
8752 getRangeByName(u
"Range_B2_B4"_ustr
));
8753 CPPUNIT_ASSERT_EQUAL(u
"$Test.$C$2:$C$4"_ustr
, getRangeByName(u
"Range_C2_C4"_ustr
));
8754 CPPUNIT_ASSERT_EQUAL(u
"$Test.$B$2:$C$4"_ustr
, getRangeByName(u
"Range_B2_C4"_ustr
));
8755 CPPUNIT_ASSERT_EQUAL(u
"B2"_ustr
, getRangeByName(u
"RelRange_Cm20_R0"_ustr
));
8757 CPPUNIT_ASSERT_EQUAL(u
"=Range_B2"_ustr
, m_pDoc
->GetFormula(0, 40, nSrcTab
)); // A41
8758 CPPUNIT_ASSERT_EQUAL(u
"=Range_B3"_ustr
, m_pDoc
->GetFormula(0, 41, nSrcTab
)); // A42
8759 CPPUNIT_ASSERT_EQUAL(u
"=Range_B4"_ustr
, m_pDoc
->GetFormula(0, 42, nSrcTab
)); // A43
8760 CPPUNIT_ASSERT_EQUAL(u
"=Range_C2"_ustr
, m_pDoc
->GetFormula(1, 40, nSrcTab
)); // B41
8761 CPPUNIT_ASSERT_EQUAL(u
"=Range_C3"_ustr
, m_pDoc
->GetFormula(1, 41, nSrcTab
)); // B42
8762 CPPUNIT_ASSERT_EQUAL(u
"=Range_C4"_ustr
, m_pDoc
->GetFormula(1, 42, nSrcTab
)); // B43
8763 CPPUNIT_ASSERT_EQUAL(01.0, m_pDoc
->GetValue(0, 40, nSrcTab
));
8764 CPPUNIT_ASSERT_EQUAL(11.0, m_pDoc
->GetValue(0, 41, nSrcTab
));
8765 CPPUNIT_ASSERT_EQUAL(21.0, m_pDoc
->GetValue(0, 42, nSrcTab
));
8766 CPPUNIT_ASSERT_EQUAL(02.0, m_pDoc
->GetValue(1, 40, nSrcTab
));
8767 CPPUNIT_ASSERT_EQUAL(12.0, m_pDoc
->GetValue(1, 41, nSrcTab
));
8768 CPPUNIT_ASSERT_EQUAL(22.0, m_pDoc
->GetValue(1, 42, nSrcTab
));
8770 CPPUNIT_ASSERT_EQUAL(u
"=RelRange_Cm20_R0"_ustr
, m_pDoc
->GetFormula(0, 50, nSrcTab
)); // A51
8771 CPPUNIT_ASSERT_EQUAL(u
"=RelRange_Cm20_R0"_ustr
, m_pDoc
->GetFormula(0, 51, nSrcTab
)); // A52
8772 CPPUNIT_ASSERT_EQUAL(u
"=RelRange_Cm20_R0"_ustr
, m_pDoc
->GetFormula(0, 52, nSrcTab
)); // A53
8773 CPPUNIT_ASSERT_EQUAL(u
"=RelRange_Cm20_R0"_ustr
, m_pDoc
->GetFormula(1, 50, nSrcTab
)); // B51
8774 CPPUNIT_ASSERT_EQUAL(u
"=RelRange_Cm20_R0"_ustr
, m_pDoc
->GetFormula(1, 51, nSrcTab
)); // B52
8775 CPPUNIT_ASSERT_EQUAL(u
"=RelRange_Cm20_R0"_ustr
, m_pDoc
->GetFormula(1, 52, nSrcTab
)); // B53
8776 CPPUNIT_ASSERT_EQUAL(01.0, m_pDoc
->GetValue(0, 50, nSrcTab
));
8777 CPPUNIT_ASSERT_EQUAL(11.0, m_pDoc
->GetValue(0, 51, nSrcTab
));
8778 CPPUNIT_ASSERT_EQUAL(21.0, m_pDoc
->GetValue(0, 52, nSrcTab
));
8779 CPPUNIT_ASSERT_EQUAL(02.0, m_pDoc
->GetValue(1, 50, nSrcTab
));
8780 CPPUNIT_ASSERT_EQUAL(12.0, m_pDoc
->GetValue(1, 51, nSrcTab
));
8781 CPPUNIT_ASSERT_EQUAL(22.0, m_pDoc
->GetValue(1, 52, nSrcTab
));
8783 CPPUNIT_ASSERT_EQUAL(nSrcTab
!= nDestTab
? u
"=SUM(Dest.C12:E12)"_ustr
: u
"=SUM(C12:E12)"_ustr
,
8784 m_pDoc
->GetFormula(0, 60, nSrcTab
)); // A61
8785 CPPUNIT_ASSERT_EQUAL(nSrcTab
!= nDestTab
? u
"=SUM(Dest.C12:E12)"_ustr
: u
"=SUM(C12:E12)"_ustr
,
8786 m_pDoc
->GetFormula(0, 61, nSrcTab
)); // A62
8787 CPPUNIT_ASSERT_EQUAL(nSrcTab
!= nDestTab
? u
"=SUM(Dest.C12:E12)"_ustr
: u
"=SUM(C12:E12)"_ustr
,
8788 m_pDoc
->GetFormula(0, 62, nSrcTab
)); // A63
8789 CPPUNIT_ASSERT_EQUAL(u
"=SUM(C2:C4)"_ustr
, m_pDoc
->GetFormula(1, 60, nSrcTab
)); // B61
8790 CPPUNIT_ASSERT_EQUAL(u
"=SUM(C2:C4)"_ustr
, m_pDoc
->GetFormula(1, 61, nSrcTab
)); // B62
8791 CPPUNIT_ASSERT_EQUAL(u
"=SUM(C2:C4)"_ustr
, m_pDoc
->GetFormula(1, 62, nSrcTab
)); // B63
8792 CPPUNIT_ASSERT_EQUAL(33.0, m_pDoc
->GetValue(0, 60, nSrcTab
));
8793 CPPUNIT_ASSERT_EQUAL(33.0, m_pDoc
->GetValue(0, 61, nSrcTab
));
8794 CPPUNIT_ASSERT_EQUAL(33.0, m_pDoc
->GetValue(0, 62, nSrcTab
));
8795 CPPUNIT_ASSERT_EQUAL(36.0, m_pDoc
->GetValue(1, 60, nSrcTab
));
8796 CPPUNIT_ASSERT_EQUAL(36.0, m_pDoc
->GetValue(1, 61, nSrcTab
));
8797 CPPUNIT_ASSERT_EQUAL(36.0, m_pDoc
->GetValue(1, 62, nSrcTab
));
8799 CPPUNIT_ASSERT_EQUAL(nSrcTab
!= nDestTab
? u
"=SUM(Dest.$C$12:$E$12)"_ustr
8800 : u
"=SUM($C$12:$E$12)"_ustr
,
8801 m_pDoc
->GetFormula(0, 70, nSrcTab
)); // A71
8802 CPPUNIT_ASSERT_EQUAL(nSrcTab
!= nDestTab
? u
"=SUM(Dest.$C$12:$E$12)"_ustr
8803 : u
"=SUM($C$12:$E$12)"_ustr
,
8804 m_pDoc
->GetFormula(0, 71, nSrcTab
)); // A72
8805 CPPUNIT_ASSERT_EQUAL(nSrcTab
!= nDestTab
? u
"=SUM(Dest.$C$12:$E$12)"_ustr
8806 : u
"=SUM($C$12:$E$12)"_ustr
,
8807 m_pDoc
->GetFormula(0, 72, nSrcTab
)); // A73
8808 CPPUNIT_ASSERT_EQUAL(u
"=SUM($C$2:$C$4)"_ustr
, m_pDoc
->GetFormula(1, 70, nSrcTab
)); // B71
8809 CPPUNIT_ASSERT_EQUAL(u
"=SUM($C$2:$C$4)"_ustr
, m_pDoc
->GetFormula(1, 71, nSrcTab
)); // B72
8810 CPPUNIT_ASSERT_EQUAL(u
"=SUM($C$2:$C$4)"_ustr
, m_pDoc
->GetFormula(1, 72, nSrcTab
)); // B73
8811 CPPUNIT_ASSERT_EQUAL(33.0, m_pDoc
->GetValue(0, 70, nSrcTab
));
8812 CPPUNIT_ASSERT_EQUAL(33.0, m_pDoc
->GetValue(0, 71, nSrcTab
));
8813 CPPUNIT_ASSERT_EQUAL(33.0, m_pDoc
->GetValue(0, 72, nSrcTab
));
8814 CPPUNIT_ASSERT_EQUAL(36.0, m_pDoc
->GetValue(1, 70, nSrcTab
));
8815 CPPUNIT_ASSERT_EQUAL(36.0, m_pDoc
->GetValue(1, 71, nSrcTab
));
8816 CPPUNIT_ASSERT_EQUAL(36.0, m_pDoc
->GetValue(1, 72, nSrcTab
));
8818 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_B2_B4)"_ustr
, m_pDoc
->GetFormula(0, 80, nSrcTab
)); // A81
8819 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_B2_B4)"_ustr
, m_pDoc
->GetFormula(0, 81, nSrcTab
)); // A82
8820 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_B2_B4)"_ustr
, m_pDoc
->GetFormula(0, 82, nSrcTab
)); // A83
8821 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_C2_C4)"_ustr
, m_pDoc
->GetFormula(1, 80, nSrcTab
)); // B81
8822 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_C2_C4)"_ustr
, m_pDoc
->GetFormula(1, 81, nSrcTab
)); // B82
8823 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_C2_C4)"_ustr
, m_pDoc
->GetFormula(1, 82, nSrcTab
)); // B83
8824 CPPUNIT_ASSERT_EQUAL(33.0, m_pDoc
->GetValue(0, 80, nSrcTab
));
8825 CPPUNIT_ASSERT_EQUAL(33.0, m_pDoc
->GetValue(0, 81, nSrcTab
));
8826 CPPUNIT_ASSERT_EQUAL(33.0, m_pDoc
->GetValue(0, 82, nSrcTab
));
8827 CPPUNIT_ASSERT_EQUAL(36.0, m_pDoc
->GetValue(1, 80, nSrcTab
));
8828 CPPUNIT_ASSERT_EQUAL(36.0, m_pDoc
->GetValue(1, 81, nSrcTab
));
8829 CPPUNIT_ASSERT_EQUAL(36.0, m_pDoc
->GetValue(1, 82, nSrcTab
));
8831 CPPUNIT_ASSERT_EQUAL(u
"=SUM($B$2:$C$4)"_ustr
, m_pDoc
->GetFormula(0, 90, nSrcTab
)); // A91
8832 CPPUNIT_ASSERT_EQUAL(u
"=SUM($B$2:$C$4)"_ustr
, m_pDoc
->GetFormula(0, 91, nSrcTab
)); // A92
8833 CPPUNIT_ASSERT_EQUAL(u
"=SUM($B$2:$C$4)"_ustr
, m_pDoc
->GetFormula(0, 92, nSrcTab
)); // A93
8834 CPPUNIT_ASSERT_EQUAL(u
"=SUM($B$2:$C$4)"_ustr
, m_pDoc
->GetFormula(1, 90, nSrcTab
)); // B91
8835 CPPUNIT_ASSERT_EQUAL(u
"=SUM($B$2:$C$4)"_ustr
, m_pDoc
->GetFormula(1, 91, nSrcTab
)); // B92
8836 CPPUNIT_ASSERT_EQUAL(u
"=SUM($B$2:$C$4)"_ustr
, m_pDoc
->GetFormula(1, 92, nSrcTab
)); // B93
8837 CPPUNIT_ASSERT_EQUAL(36.0, m_pDoc
->GetValue(0, 90, nSrcTab
));
8838 CPPUNIT_ASSERT_EQUAL(36.0, m_pDoc
->GetValue(0, 91, nSrcTab
));
8839 CPPUNIT_ASSERT_EQUAL(36.0, m_pDoc
->GetValue(0, 92, nSrcTab
));
8840 CPPUNIT_ASSERT_EQUAL(36.0, m_pDoc
->GetValue(1, 90, nSrcTab
));
8841 CPPUNIT_ASSERT_EQUAL(36.0, m_pDoc
->GetValue(1, 91, nSrcTab
));
8842 CPPUNIT_ASSERT_EQUAL(36.0, m_pDoc
->GetValue(1, 92, nSrcTab
));
8844 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_B2_C4)"_ustr
, m_pDoc
->GetFormula(0, 100, nSrcTab
)); // A101
8845 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_B2_C4)"_ustr
, m_pDoc
->GetFormula(0, 101, nSrcTab
)); // A102
8846 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_B2_C4)"_ustr
, m_pDoc
->GetFormula(0, 102, nSrcTab
)); // A103
8847 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_B2_C4)"_ustr
, m_pDoc
->GetFormula(1, 100, nSrcTab
)); // B101
8848 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_B2_C4)"_ustr
, m_pDoc
->GetFormula(1, 101, nSrcTab
)); // B102
8849 CPPUNIT_ASSERT_EQUAL(u
"=SUM(Range_B2_C4)"_ustr
, m_pDoc
->GetFormula(1, 102, nSrcTab
)); // B103
8850 CPPUNIT_ASSERT_EQUAL(36.0, m_pDoc
->GetValue(0, 100, nSrcTab
));
8851 CPPUNIT_ASSERT_EQUAL(36.0, m_pDoc
->GetValue(0, 101, nSrcTab
));
8852 CPPUNIT_ASSERT_EQUAL(36.0, m_pDoc
->GetValue(0, 102, nSrcTab
));
8853 CPPUNIT_ASSERT_EQUAL(36.0, m_pDoc
->GetValue(1, 100, nSrcTab
));
8854 CPPUNIT_ASSERT_EQUAL(36.0, m_pDoc
->GetValue(1, 101, nSrcTab
));
8855 CPPUNIT_ASSERT_EQUAL(36.0, m_pDoc
->GetValue(1, 102, nSrcTab
));
8857 // Existing references to the destination range must not change
8858 CPPUNIT_ASSERT_EQUAL(OUString(aFBase
+ "C12"), m_pDoc
->GetFormula(0, 112, nSrcTab
));
8859 CPPUNIT_ASSERT_EQUAL(OUString(aFBase
+ "C13"), m_pDoc
->GetFormula(0, 113, nSrcTab
));
8860 CPPUNIT_ASSERT_EQUAL(OUString(aFBase
+ "C14"), m_pDoc
->GetFormula(0, 114, nSrcTab
));
8861 CPPUNIT_ASSERT_EQUAL(OUString(aFBase
+ "D12"), m_pDoc
->GetFormula(1, 112, nSrcTab
));
8862 CPPUNIT_ASSERT_EQUAL(OUString(aFBase
+ "D13"), m_pDoc
->GetFormula(1, 113, nSrcTab
));
8863 CPPUNIT_ASSERT_EQUAL(OUString(aFBase
+ "D14"), m_pDoc
->GetFormula(1, 114, nSrcTab
));
8864 CPPUNIT_ASSERT_EQUAL(OUString(aFBase
+ "E12"), m_pDoc
->GetFormula(2, 112, nSrcTab
));
8865 CPPUNIT_ASSERT_EQUAL(OUString(aFBase
+ "E13"), m_pDoc
->GetFormula(2, 113, nSrcTab
));
8866 CPPUNIT_ASSERT_EQUAL(OUString(aFBase
+ "E14"), m_pDoc
->GetFormula(2, 114, nSrcTab
));
8869 CPPUNIT_TEST_FIXTURE(TestCopyPaste
, testReferencedCutRangesCol
)
8871 const SCTAB nSrcTab
= 0;
8872 const SCTAB nDestTab
= 2;
8873 std::unique_ptr
<ScUndoCut
> pUndoCut
;
8874 std::unique_ptr
<ScUndoPaste
> pUndoPaste
;
8875 executeReferencedCutRangesCol(false, nSrcTab
, nDestTab
, true, pUndoCut
, pUndoPaste
);
8876 checkReferencedCutRangesCol(nSrcTab
, nDestTab
);
8880 checkReferencedCutRangesColIntitial(nSrcTab
, nDestTab
, u
"After undo"_ustr
);
8884 checkReferencedCutRangesCol(nSrcTab
, nDestTab
);
8888 checkReferencedCutRangesColIntitial(nSrcTab
, nDestTab
, u
"After undo"_ustr
);
8893 for (int i
= m_pDoc
->GetTableCount(); i
> 0; --i
)
8894 m_pDoc
->DeleteTab(i
- 1);
8898 CPPUNIT_TEST_FIXTURE(TestCopyPaste
, testReferencedCutTransposedRangesColTab0To0
)
8900 checkReferencedCutTransposedRangesColUndo(0, 0);
8904 CPPUNIT_TEST_FIXTURE(TestCopyPaste
, testReferencedCutTransposedRangesColTab0To1
)
8906 checkReferencedCutTransposedRangesColUndo(0, 1);
8910 CPPUNIT_TEST_FIXTURE(TestCopyPaste
, testReferencedCutTransposedRangesColTab1To3
)
8912 checkReferencedCutTransposedRangesColUndo(1, 3);
8916 CPPUNIT_TEST_FIXTURE(TestCopyPaste
, testReferencedCutTransposedRangesColTab3To1
)
8918 checkReferencedCutTransposedRangesColUndo(3, 1);
8922 void TestCopyPaste::checkReferencedCutTransposedRangesColUndo(const SCTAB nSrcTab
,
8923 const SCTAB nDestTab
)
8925 std::unique_ptr
<ScUndoCut
> pUndoCut
;
8926 std::unique_ptr
<ScUndoPaste
> pUndoPaste
;
8927 executeReferencedCutRangesCol(true, nSrcTab
, nDestTab
, true, pUndoCut
, pUndoPaste
);
8928 checkReferencedCutTransposedRangesCol(nSrcTab
, nDestTab
);
8932 checkReferencedCutRangesColIntitial(nSrcTab
, nDestTab
, u
"After undo"_ustr
);
8936 checkReferencedCutTransposedRangesCol(nSrcTab
, nDestTab
);
8940 checkReferencedCutRangesColIntitial(nSrcTab
, nDestTab
, u
"After undo"_ustr
);
8945 for (int i
= m_pDoc
->GetTableCount(); i
> 0; --i
)
8946 m_pDoc
->DeleteTab(i
- 1);
8949 CPPUNIT_TEST_FIXTURE(TestCopyPaste
, testCutTransposedFormulas
)
8951 const SCTAB nTab
= 0;
8952 m_pDoc
->InsertTab(nTab
, u
"Test"_ustr
);
8954 m_pDoc
->SetValue(0, 0, nTab
, 1.0); // A1
8955 m_pDoc
->SetValue(1, 0, nTab
, 2.0); // B1
8957 m_pDoc
->SetString(1, 1, nTab
, u
"=A1"_ustr
); // B2
8958 m_pDoc
->SetString(2, 1, nTab
, u
"=B1"_ustr
); // C2
8959 m_pDoc
->SetString(3, 1, nTab
, u
"=SUM(A1:B1)"_ustr
); // D2
8960 m_pDoc
->SetString(4, 1, nTab
, u
"=$B$1"_ustr
); // E2
8961 m_pDoc
->SetString(5, 1, nTab
, u
"=$B1"_ustr
); // F2
8962 m_pDoc
->SetString(6, 1, nTab
, u
"=B$1"_ustr
); // G2
8964 // Check precondition
8965 CPPUNIT_ASSERT_EQUAL(3.0, m_pDoc
->GetValue(3, 1, nTab
));
8967 // Cut formulas B2:G2 to the clip document.
8968 ScDocument
aClipDoc(SCDOCMODE_CLIP
);
8969 ScRange
aSrcRange(1, 1, nTab
, 6, 1, nTab
);
8970 cutToClip(*m_xDocShell
, aSrcRange
, &aClipDoc
, false);
8973 ScRange
aDestRange(2, 2, nTab
, 2, 7, nTab
);
8974 ScMarkData
aDestMark(m_pDoc
->GetSheetLimits());
8977 ScDocument
* pOrigClipDoc
= &aClipDoc
;
8978 ScDocumentUniquePtr
pTransClip(new ScDocument(SCDOCMODE_CLIP
));
8979 aClipDoc
.TransposeClip(pTransClip
.get(), InsertDeleteFlags::ALL
, false, true);
8980 aDestMark
.SetMarkArea(aDestRange
);
8982 m_pDoc
->CopyFromClip(aDestRange
, aDestMark
, InsertDeleteFlags::ALL
, nullptr, pTransClip
.get(),
8983 true, false, true, false);
8984 m_pDoc
->UpdateTranspose(aDestRange
.aStart
, pOrigClipDoc
, aDestMark
, nullptr);
8987 CPPUNIT_ASSERT_EQUAL(u
"=A1"_ustr
, m_pDoc
->GetFormula(2, 2, nTab
));
8988 CPPUNIT_ASSERT_EQUAL(1.0, m_pDoc
->GetValue(2, 2, nTab
));
8990 CPPUNIT_ASSERT_EQUAL(u
"=B1"_ustr
, m_pDoc
->GetFormula(2, 3, nTab
));
8991 CPPUNIT_ASSERT_EQUAL(2.0, m_pDoc
->GetValue(2, 3, nTab
));
8993 CPPUNIT_ASSERT_EQUAL(u
"=SUM(A1:B1)"_ustr
, m_pDoc
->GetFormula(2, 4, nTab
));
8994 CPPUNIT_ASSERT_EQUAL(3.0, m_pDoc
->GetValue(2, 4, nTab
));
8996 CPPUNIT_ASSERT_EQUAL(u
"=$B$1"_ustr
, m_pDoc
->GetFormula(2, 5, nTab
));
8997 CPPUNIT_ASSERT_EQUAL(2.0, m_pDoc
->GetValue(2, 5, nTab
));
8999 CPPUNIT_ASSERT_EQUAL(u
"=$B1"_ustr
, m_pDoc
->GetFormula(2, 6, nTab
));
9000 CPPUNIT_ASSERT_EQUAL(2.0, m_pDoc
->GetValue(2, 6, nTab
));
9002 CPPUNIT_ASSERT_EQUAL(u
"=B$1"_ustr
, m_pDoc
->GetFormula(2, 7, nTab
));
9003 CPPUNIT_ASSERT_EQUAL(2.0, m_pDoc
->GetValue(2, 7, nTab
));
9006 CPPUNIT_TEST_FIXTURE(TestCopyPaste
, testCutTransposedFormulasSquare
)
9008 const SCTAB nTab
= 0;
9009 m_pDoc
->InsertTab(nTab
, u
"Test"_ustr
);
9011 m_pDoc
->SetValue(0, 0, nTab
, 1.0); // A1
9012 m_pDoc
->SetValue(0, 1, nTab
, 2.0); // A2
9013 m_pDoc
->SetValue(1, 0, nTab
, 11.0); // B1
9014 m_pDoc
->SetValue(1, 1, nTab
, 12.0); // B2
9015 m_pDoc
->SetValue(2, 0, nTab
, 21.0); // C1
9016 m_pDoc
->SetValue(2, 1, nTab
, 22.0); // C2
9018 m_pDoc
->SetString(0, 3, nTab
, u
"=A1"_ustr
); // A4
9019 m_pDoc
->SetString(0, 4, nTab
, u
"=A2"_ustr
); // A5
9020 m_pDoc
->SetString(1, 3, nTab
, u
"=B1"_ustr
); // B4
9021 m_pDoc
->SetString(1, 4, nTab
, u
"=B2"_ustr
); // B5
9022 m_pDoc
->SetString(2, 3, nTab
, u
"=C1"_ustr
); // C4
9023 m_pDoc
->SetString(2, 4, nTab
, u
"=C2"_ustr
); // C5
9025 // Check precondition
9026 CPPUNIT_ASSERT_EQUAL(1.0, m_pDoc
->GetValue(0, 3, nTab
));
9027 CPPUNIT_ASSERT_EQUAL(2.0, m_pDoc
->GetValue(0, 4, nTab
));
9028 CPPUNIT_ASSERT_EQUAL(11.0, m_pDoc
->GetValue(1, 3, nTab
));
9029 CPPUNIT_ASSERT_EQUAL(12.0, m_pDoc
->GetValue(1, 4, nTab
));
9030 CPPUNIT_ASSERT_EQUAL(21.0, m_pDoc
->GetValue(2, 3, nTab
));
9031 CPPUNIT_ASSERT_EQUAL(22.0, m_pDoc
->GetValue(2, 4, nTab
));
9033 printRange(m_pDoc
, ScRange(0, 0, nTab
, 2, 1, nTab
), "Values");
9034 printRange(m_pDoc
, ScRange(0, 3, nTab
, 2, 4, nTab
), "Formulas");
9035 printFormula(m_pDoc
, 0, 4, nTab
);
9037 // Cut formulas A4:B5 to the clip document.
9038 ScDocument
aClipDoc(SCDOCMODE_CLIP
);
9039 ScRange
aSrcRange(0, 3, nTab
, 2, 4, nTab
);
9040 cutToClip(*m_xDocShell
, aSrcRange
, &aClipDoc
, false);
9043 ScRange
aDestRange(1, 6, nTab
, 2, 8, nTab
);
9044 ScMarkData
aDestMark(m_pDoc
->GetSheetLimits());
9047 ScDocument
* pOrigClipDoc
= &aClipDoc
;
9048 ScDocumentUniquePtr
pTransClip(new ScDocument(SCDOCMODE_CLIP
));
9049 aClipDoc
.TransposeClip(pTransClip
.get(), InsertDeleteFlags::ALL
, false, true);
9050 aDestMark
.SetMarkArea(aDestRange
);
9052 m_pDoc
->CopyFromClip(aDestRange
, aDestMark
, InsertDeleteFlags::ALL
, nullptr, pTransClip
.get(),
9053 true, false, true, false);
9054 m_pDoc
->UpdateTranspose(aDestRange
.aStart
, pOrigClipDoc
, aDestMark
, nullptr);
9057 printRange(m_pDoc
, aDestRange
, "Formulas after cut transposed");
9058 printFormula(m_pDoc
, 2, 6, nTab
);
9061 CPPUNIT_ASSERT_EQUAL(1.0, m_pDoc
->GetValue(1, 6, nTab
));
9062 CPPUNIT_ASSERT_EQUAL(2.0, m_pDoc
->GetValue(2, 6, nTab
));
9063 CPPUNIT_ASSERT_EQUAL(11.0, m_pDoc
->GetValue(1, 7, nTab
));
9064 CPPUNIT_ASSERT_EQUAL(12.0, m_pDoc
->GetValue(2, 7, nTab
));
9065 CPPUNIT_ASSERT_EQUAL(21.0, m_pDoc
->GetValue(1, 8, nTab
));
9066 CPPUNIT_ASSERT_EQUAL(22.0, m_pDoc
->GetValue(2, 8, nTab
));
9068 CPPUNIT_ASSERT_EQUAL(u
"=A1"_ustr
, m_pDoc
->GetFormula(1, 6, nTab
));
9069 CPPUNIT_ASSERT_EQUAL(u
"=A2"_ustr
, m_pDoc
->GetFormula(2, 6, nTab
));
9070 CPPUNIT_ASSERT_EQUAL(u
"=B1"_ustr
, m_pDoc
->GetFormula(1, 7, nTab
));
9071 CPPUNIT_ASSERT_EQUAL(u
"=B2"_ustr
, m_pDoc
->GetFormula(2, 7, nTab
));
9072 CPPUNIT_ASSERT_EQUAL(u
"=C1"_ustr
, m_pDoc
->GetFormula(1, 8, nTab
));
9073 CPPUNIT_ASSERT_EQUAL(u
"=C2"_ustr
, m_pDoc
->GetFormula(2, 8, nTab
));
9076 CPPUNIT_TEST_FIXTURE(TestCopyPaste
, testTdf142065
)
9078 const SCTAB nTab
= 0;
9079 m_pDoc
->InsertTab(nTab
, u
"Test"_ustr
);
9081 m_pDoc
->SetValue(0, 0, nTab
, 1.0); // A1
9082 m_pDoc
->SetString(1, 0, nTab
, u
"=A1"_ustr
); // B1
9083 m_pDoc
->SetString(2, 0, nTab
, u
"=SUM(A1:B1)"_ustr
); // C1
9084 m_pDoc
->SetString(3, 0, nTab
, u
"=$A$1"_ustr
); // D1
9085 m_pDoc
->SetString(4, 0, nTab
, u
"=$A1"_ustr
); // E1
9086 m_pDoc
->SetString(5, 0, nTab
, u
"=A$1"_ustr
); // F1
9088 // Check precondition
9089 CPPUNIT_ASSERT_EQUAL(2.0, m_pDoc
->GetValue(2, 0, nTab
));
9091 // Cut A1:F1 to the clip document.
9092 ScDocument
aClipDoc(SCDOCMODE_CLIP
);
9093 ScRange
aSrcRange(0, 0, nTab
, 5, 0, nTab
);
9094 printRange(m_pDoc
, aSrcRange
, "Src sheet");
9095 printFormula(m_pDoc
, 1, 0, nTab
);
9096 cutToClip(*m_xDocShell
, aSrcRange
, &aClipDoc
, false);
9097 printRange(&aClipDoc
, aSrcRange
, "clip doc (&aClipDoc)");
9098 printFormula(&aClipDoc
, 1, 0, nTab
);
9101 ScRange
aDestRange(0, 2, nTab
, 0, 7, nTab
);
9102 ScMarkData
aDestMark(m_pDoc
->GetSheetLimits());
9105 ScDocument
* pOrigClipDoc
= &aClipDoc
;
9106 ScDocumentUniquePtr
pTransClip(new ScDocument(SCDOCMODE_CLIP
));
9107 aClipDoc
.TransposeClip(pTransClip
.get(), InsertDeleteFlags::ALL
, false, true);
9108 printRange(pTransClip
.get(), ScRange(0, 0, nTab
, 0, 1, nTab
),
9109 "transposed clip doc (pTransClip.get())");
9110 printFormula(pTransClip
.get(), 0, 1, nTab
);
9111 printFormula(pTransClip
.get(), 1, 0, nTab
);
9112 aDestMark
.SetMarkArea(aDestRange
);
9114 m_pDoc
->CopyFromClip(aDestRange
, aDestMark
, InsertDeleteFlags::ALL
, nullptr, pTransClip
.get(),
9115 true, false, true, false);
9116 printRange(m_pDoc
, aDestRange
, "dest doc");
9117 printFormula(m_pDoc
, 0, 3, nTab
);
9118 printRange(pOrigClipDoc
, aSrcRange
, "orig clip doc (pOrigClipDoc)");
9119 printFormula(pOrigClipDoc
, 1, 0, nTab
);
9120 m_pDoc
->UpdateTranspose(aDestRange
.aStart
, pOrigClipDoc
, aDestMark
, nullptr);
9122 printRange(m_pDoc
, aDestRange
, "dest doc after UpdateTranspose()");
9123 printFormula(m_pDoc
, 0, 3, nTab
);
9126 CPPUNIT_ASSERT_EQUAL(1.0, m_pDoc
->GetValue(0, 2, nTab
));
9127 // Without the fix in place, this would have failed with
9129 // - Actual : =#REF!#REF!
9130 CPPUNIT_ASSERT_EQUAL(u
"=A3"_ustr
, m_pDoc
->GetFormula(0, 3, nTab
));
9131 // Without the fix in place, this would have failed with
9134 CPPUNIT_ASSERT_EQUAL(1.0, m_pDoc
->GetValue(0, 3, nTab
));
9135 // Without the fix in place, this would have failed with
9136 // - Expected: =SUM(A3:A4)
9137 // - Actual : =SUM(#REF!#REF!:#REF!#REF!)
9138 CPPUNIT_ASSERT_EQUAL(u
"=SUM(A3:A4)"_ustr
, m_pDoc
->GetFormula(0, 4, nTab
));
9139 // Without the fix in place, this would have failed with
9142 CPPUNIT_ASSERT_EQUAL(2.0, m_pDoc
->GetValue(0, 4, nTab
));
9144 CPPUNIT_ASSERT_EQUAL(u
"=$A$3"_ustr
, m_pDoc
->GetFormula(0, 5, nTab
));
9145 CPPUNIT_ASSERT_EQUAL(1.0, m_pDoc
->GetValue(0, 5, nTab
));
9147 CPPUNIT_ASSERT_EQUAL(u
"=$A3"_ustr
, m_pDoc
->GetFormula(0, 6, nTab
));
9148 CPPUNIT_ASSERT_EQUAL(1.0, m_pDoc
->GetValue(0, 6, nTab
));
9150 CPPUNIT_ASSERT_EQUAL(u
"=A$3"_ustr
, m_pDoc
->GetFormula(0, 7, nTab
));
9151 CPPUNIT_ASSERT_EQUAL(1.0, m_pDoc
->GetValue(0, 7, nTab
));
9154 CPPUNIT_TEST_FIXTURE(TestCopyPaste
, testCopyPasteMultiRange
)
9156 m_pDoc
->InsertTab(0, u
"Test"_ustr
);
9158 // Fill A2:B6 with numbers.
9159 for (SCROW nRow
= 1; nRow
<= 5; ++nRow
)
9161 for (SCCOL nCol
= 0; nCol
<= 1; ++nCol
)
9163 ScAddress
aPos(nCol
, nRow
, 0);
9164 m_pDoc
->SetValue(aPos
, nRow
+ nCol
);
9168 // Fill D9:E11 with numbers.
9169 for (SCROW nRow
= 8; nRow
<= 10; ++nRow
)
9171 for (SCCOL nCol
= 3; nCol
<= 4; ++nCol
)
9173 ScAddress
aPos(nCol
, nRow
, 0);
9174 m_pDoc
->SetValue(aPos
, 10.0);
9178 ScMarkData
aMark(m_pDoc
->GetSheetLimits());
9179 aMark
.SelectOneTable(0);
9181 // Copy A2:B2, A4:B4, and A6:B6 to clipboard.
9182 ScDocument
aClipDoc(SCDOCMODE_CLIP
);
9183 ScClipParam aClipParam
;
9184 aClipParam
.maRanges
.push_back(ScRange(0, 1, 0, 1, 1, 0)); // A2:B2
9185 aClipParam
.maRanges
.push_back(ScRange(0, 3, 0, 1, 3, 0)); // A4:B4
9186 aClipParam
.maRanges
.push_back(ScRange(0, 5, 0, 1, 5, 0)); // A6:B6
9187 aClipParam
.meDirection
= ScClipParam::Row
;
9188 m_pDoc
->CopyToClip(aClipParam
, &aClipDoc
, &aMark
, false, false);
9190 // Paste to D9:E11, and make sure it won't crash (rhbz#1080196).
9191 m_pDoc
->CopyMultiRangeFromClip(ScAddress(3, 8, 0), aMark
, InsertDeleteFlags::CONTENTS
,
9193 CPPUNIT_ASSERT_EQUAL(1.0, m_pDoc
->GetValue(ScAddress(3, 8, 0)));
9194 CPPUNIT_ASSERT_EQUAL(2.0, m_pDoc
->GetValue(ScAddress(4, 8, 0)));
9195 CPPUNIT_ASSERT_EQUAL(3.0, m_pDoc
->GetValue(ScAddress(3, 9, 0)));
9196 CPPUNIT_ASSERT_EQUAL(4.0, m_pDoc
->GetValue(ScAddress(4, 9, 0)));
9197 CPPUNIT_ASSERT_EQUAL(5.0, m_pDoc
->GetValue(ScAddress(3, 10, 0)));
9198 CPPUNIT_ASSERT_EQUAL(6.0, m_pDoc
->GetValue(ScAddress(4, 10, 0)));
9200 m_pDoc
->DeleteTab(0);
9203 CPPUNIT_TEST_FIXTURE(TestCopyPaste
, testCopyPasteSkipEmpty
)
9216 explicit TestRange(ScDocument
* pDoc
)
9221 bool checkRange(const ScAddress
& rPos
, const Check
* p
, const Check
* pEnd
)
9223 ScAddress
aPos(rPos
);
9224 OUString aPosStr
= aPos
.Format(ScRefFlags::VALID
);
9225 for (; p
!= pEnd
; ++p
, aPos
.IncRow())
9227 if (!mpDoc
->GetString(aPos
).equalsAscii(p
->mpStr
))
9229 cerr
<< aPosStr
<< ": incorrect string value: expected='" << p
->mpStr
9230 << "' actual='" << mpDoc
->GetString(aPos
) << endl
;
9234 const SvxBrushItem
* pBrush
= mpDoc
->GetAttr(aPos
, ATTR_BACKGROUND
);
9237 cerr
<< aPosStr
<< ": failed to get brush item from the cell." << endl
;
9241 if (pBrush
->GetColor() != p
->maColor
)
9243 Color aExpected
= p
->maColor
;
9244 Color aActual
= pBrush
->GetColor();
9245 cerr
<< aPosStr
<< ": incorrect cell background color: expected=("
9246 << static_cast<int>(aExpected
.GetRed()) << ","
9247 << static_cast<int>(aExpected
.GetGreen()) << ","
9248 << static_cast<int>(aExpected
.GetBlue()) << "), actual=("
9249 << static_cast<int>(aActual
.GetRed()) << ","
9250 << static_cast<int>(aActual
.GetGreen()) << ","
9251 << static_cast<int>(aActual
.GetBlue()) << ")" << endl
;
9256 bool bHasNote
= mpDoc
->HasNote(aPos
);
9257 if (bHasNote
!= p
->mbHasNote
)
9259 cerr
<< aPosStr
<< ": ";
9261 cerr
<< "this cell should have a cell note, but doesn't." << endl
;
9263 cerr
<< "this cell should NOT have a cell note, but one is found." << endl
;
9274 m_pDoc
->InsertTab(0, u
"Test"_ustr
);
9275 m_pDoc
->InitDrawLayer(m_xDocShell
.get()); // for cell note objects.
9277 ScRange
aSrcRange(0, 0, 0, 0, 4, 0);
9278 ScRange
aDestRange(1, 0, 0, 1, 4, 0);
9280 ScMarkData
aMark(m_pDoc
->GetSheetLimits());
9281 aMark
.SetMarkArea(aDestRange
);
9283 // Put some texts in B1:B5.
9284 m_pDoc
->SetString(ScAddress(1, 0, 0), u
"A"_ustr
);
9285 m_pDoc
->SetString(ScAddress(1, 1, 0), u
"B"_ustr
);
9286 m_pDoc
->SetString(ScAddress(1, 2, 0), u
"C"_ustr
);
9287 m_pDoc
->SetString(ScAddress(1, 3, 0), u
"D"_ustr
);
9288 m_pDoc
->SetString(ScAddress(1, 4, 0), u
"E"_ustr
);
9290 // Set the background color of B1:B5 to blue.
9291 ScPatternAttr
aCellBackColor(m_pDoc
->getCellAttributeHelper());
9292 aCellBackColor
.GetItemSet().Put(SvxBrushItem(COL_BLUE
, ATTR_BACKGROUND
));
9293 m_pDoc
->ApplyPatternAreaTab(1, 0, 1, 4, 0, aCellBackColor
);
9295 // Insert notes to B1:B5.
9296 m_pDoc
->GetOrCreateNote(ScAddress(1, 0, 0));
9297 m_pDoc
->GetOrCreateNote(ScAddress(1, 1, 0));
9298 m_pDoc
->GetOrCreateNote(ScAddress(1, 2, 0));
9299 m_pDoc
->GetOrCreateNote(ScAddress(1, 3, 0));
9300 m_pDoc
->GetOrCreateNote(ScAddress(1, 4, 0));
9302 // Prepare a clipboard content interleaved with empty cells.
9303 ScDocument
aClipDoc(SCDOCMODE_CLIP
);
9304 aClipDoc
.ResetClip(m_pDoc
, &aMark
);
9305 ScClipParam
aParam(aSrcRange
, false);
9306 aClipDoc
.SetClipParam(aParam
);
9307 aClipDoc
.SetString(ScAddress(0, 0, 0), u
"Clip1"_ustr
);
9308 aClipDoc
.SetString(ScAddress(0, 2, 0), u
"Clip2"_ustr
);
9309 aClipDoc
.SetString(ScAddress(0, 4, 0), u
"Clip3"_ustr
);
9311 // Set the background color of A1:A5 to yellow.
9312 aCellBackColor
.GetItemSet().Put(SvxBrushItem(COL_YELLOW
, ATTR_BACKGROUND
));
9313 aClipDoc
.ApplyPatternAreaTab(0, 0, 0, 4, 0, aCellBackColor
);
9315 CPPUNIT_ASSERT_EQUAL(CELLTYPE_STRING
, aClipDoc
.GetCellType(ScAddress(0, 0, 0)));
9316 CPPUNIT_ASSERT_EQUAL(CELLTYPE_NONE
, aClipDoc
.GetCellType(ScAddress(0, 1, 0)));
9317 CPPUNIT_ASSERT_EQUAL(CELLTYPE_STRING
, aClipDoc
.GetCellType(ScAddress(0, 2, 0)));
9318 CPPUNIT_ASSERT_EQUAL(CELLTYPE_NONE
, aClipDoc
.GetCellType(ScAddress(0, 3, 0)));
9319 CPPUNIT_ASSERT_EQUAL(CELLTYPE_STRING
, aClipDoc
.GetCellType(ScAddress(0, 4, 0)));
9321 // Check the initial condition.
9323 static const Check aChecks
[] = {
9324 { "A", COL_BLUE
, true }, { "B", COL_BLUE
, true }, { "C", COL_BLUE
, true },
9325 { "D", COL_BLUE
, true }, { "E", COL_BLUE
, true },
9329 = aTest
.checkRange(ScAddress(1, 0, 0), aChecks
, aChecks
+ SAL_N_ELEMENTS(aChecks
));
9330 CPPUNIT_ASSERT_MESSAGE("Initial check failed.", bRes
);
9333 // Create undo document.
9334 ScDocumentUniquePtr
pUndoDoc(new ScDocument(SCDOCMODE_UNDO
));
9335 pUndoDoc
->InitUndo(*m_pDoc
, 0, 0);
9336 m_pDoc
->CopyToDocument(aDestRange
, InsertDeleteFlags::ALL
, false, *pUndoDoc
, &aMark
);
9338 // Paste clipboard content onto A1:A5 but skip empty cells.
9339 m_pDoc
->CopyFromClip(aDestRange
, aMark
, InsertDeleteFlags::ALL
, pUndoDoc
.get(), &aClipDoc
, true,
9340 false, false, true /*bSkipEmpty*/);
9342 // Create redo document.
9343 ScDocumentUniquePtr
pRedoDoc(new ScDocument(SCDOCMODE_UNDO
));
9344 pRedoDoc
->InitUndo(*m_pDoc
, 0, 0);
9345 m_pDoc
->CopyToDocument(aDestRange
, InsertDeleteFlags::ALL
, false, *pRedoDoc
, &aMark
);
9347 // Create an undo object for this.
9348 std::unique_ptr
<ScRefUndoData
> pRefUndoData(new ScRefUndoData(m_pDoc
));
9349 ScUndoPaste
aUndo(m_xDocShell
.get(), aDestRange
, aMark
, std::move(pUndoDoc
),
9350 std::move(pRedoDoc
), InsertDeleteFlags::ALL
, std::move(pRefUndoData
));
9352 // Check the content after the paste.
9354 // tdf#141440 - do not delete notes when pasting contents
9355 static const Check aChecks
[] = {
9356 { "Clip1", COL_YELLOW
, true }, { "B", COL_BLUE
, true },
9357 { "Clip2", COL_YELLOW
, true }, { "D", COL_BLUE
, true },
9358 { "Clip3", COL_YELLOW
, true },
9362 = aTest
.checkRange(ScAddress(1, 0, 0), aChecks
, aChecks
+ SAL_N_ELEMENTS(aChecks
));
9363 CPPUNIT_ASSERT_MESSAGE("Check after paste failed.", bRes
);
9366 // Undo, and check the content.
9369 static const Check aChecks
[] = {
9370 { "A", COL_BLUE
, true }, { "B", COL_BLUE
, true }, { "C", COL_BLUE
, true },
9371 { "D", COL_BLUE
, true }, { "E", COL_BLUE
, true },
9375 = aTest
.checkRange(ScAddress(1, 0, 0), aChecks
, aChecks
+ SAL_N_ELEMENTS(aChecks
));
9376 CPPUNIT_ASSERT_MESSAGE("Check after undo failed.", bRes
);
9379 // Redo, and check the content again.
9382 // tdf#141440 - do not delete notes when pasting contents
9383 static const Check aChecks
[] = {
9384 { "Clip1", COL_YELLOW
, true }, { "B", COL_BLUE
, true },
9385 { "Clip2", COL_YELLOW
, true }, { "D", COL_BLUE
, true },
9386 { "Clip3", COL_YELLOW
, true },
9390 = aTest
.checkRange(ScAddress(1, 0, 0), aChecks
, aChecks
+ SAL_N_ELEMENTS(aChecks
));
9391 CPPUNIT_ASSERT_MESSAGE("Check after redo failed.", bRes
);
9394 m_pDoc
->DeleteTab(0);
9397 CPPUNIT_TEST_FIXTURE(TestCopyPaste
, testCopyPasteSkipEmpty2
)
9399 m_pDoc
->InsertTab(0, u
"Test"_ustr
);
9401 m_pDoc
->SetString(ScAddress(0, 0, 0), u
"A"_ustr
);
9402 m_pDoc
->SetString(ScAddress(2, 0, 0), u
"C"_ustr
);
9404 // Copy A1:C1 to clipboard.
9405 ScDocument
aClipDoc(SCDOCMODE_CLIP
);
9406 aClipDoc
.ResetClip(m_pDoc
, static_cast<SCTAB
>(0));
9407 copyToClip(m_pDoc
, ScRange(0, 0, 0, 2, 0, 0), &aClipDoc
);
9409 // Paste to A3 with the skip empty option set. This used to freeze. (fdo#77735)
9410 ScRange
aDestRange(0, 2, 0, 2, 2, 0);
9411 ScMarkData
aMark(m_pDoc
->GetSheetLimits());
9412 aMark
.SetMarkArea(aDestRange
);
9413 m_pDoc
->CopyFromClip(aDestRange
, aMark
, InsertDeleteFlags::ALL
, nullptr, &aClipDoc
, false,
9416 CPPUNIT_ASSERT_EQUAL(u
"A"_ustr
, m_pDoc
->GetString(ScAddress(0, 2, 0)));
9417 CPPUNIT_ASSERT_EQUAL_MESSAGE("B3 should be empty.", CELLTYPE_NONE
,
9418 m_pDoc
->GetCellType(ScAddress(1, 2, 0)));
9419 CPPUNIT_ASSERT_EQUAL(u
"C"_ustr
, m_pDoc
->GetString(ScAddress(2, 2, 0)));
9421 m_pDoc
->DeleteTab(0);
9424 CPPUNIT_TEST_FIXTURE(TestCopyPaste
, testCutPasteRefUndo
)
9426 // Testing scenario: A2 references B2, and B2 gets cut and pasted onto C2,
9427 // which updates A2's formula to reference C2. Then the paste action gets
9428 // undone, which should also undo A2's formula to reference back to B2.
9430 sc::AutoCalcSwitch
aACSwitch(*m_pDoc
, true); // turn on auto calc.
9432 m_pDoc
->InsertTab(0, u
"Test"_ustr
);
9434 // A2 references B2.
9435 m_pDoc
->SetString(ScAddress(0, 1, 0), u
"=B2"_ustr
);
9437 ScMarkData
aMark(m_pDoc
->GetSheetLimits());
9438 aMark
.SelectOneTable(0);
9440 // Set up clip document for cutting of B2.
9441 ScDocument
aClipDoc(SCDOCMODE_CLIP
);
9442 aClipDoc
.ResetClip(m_pDoc
, &aMark
);
9443 ScClipParam
aParam(ScAddress(1, 1, 0), true);
9444 aClipDoc
.SetClipParam(aParam
);
9445 aClipDoc
.SetValue(ScAddress(1, 1, 0), 12.0);
9447 // Set up undo document for reference update.
9448 ScDocumentUniquePtr
pUndoDoc(new ScDocument(SCDOCMODE_UNDO
));
9449 pUndoDoc
->InitUndo(*m_pDoc
, 0, 0);
9451 // Do the pasting of 12 into C2. This should update A2 to reference C2.
9452 m_pDoc
->CopyFromClip(ScAddress(2, 1, 0), aMark
, InsertDeleteFlags::CONTENTS
, pUndoDoc
.get(),
9454 CPPUNIT_ASSERT_EQUAL(12.0, m_pDoc
->GetValue(0, 1, 0));
9456 CPPUNIT_ASSERT_EQUAL_MESSAGE("A2 should be referencing C2.", u
"=C2"_ustr
,
9457 m_pDoc
->GetFormula(0, 1, 0));
9459 // At this point, the ref undo document should contain a formula cell at A2 that references B2.
9460 CPPUNIT_ASSERT_EQUAL_MESSAGE("A2 in the undo document should be referencing B2.", u
"=B2"_ustr
,
9461 pUndoDoc
->GetFormula(0, 1, 0));
9463 ScUndoPaste
aUndo(m_xDocShell
.get(), ScRange(2, 1, 0), aMark
, std::move(pUndoDoc
), nullptr,
9464 InsertDeleteFlags::CONTENTS
, nullptr, false, nullptr);
9467 // Now A2 should be referencing B2 once again.
9468 CPPUNIT_ASSERT_EQUAL_MESSAGE("A2 should be referencing B2 after undo.", u
"=B2"_ustr
,
9469 m_pDoc
->GetFormula(0, 1, 0));
9471 m_pDoc
->DeleteTab(0);
9474 CPPUNIT_TEST_FIXTURE(TestCopyPaste
, testCutPasteGroupRefUndo
)
9476 // Test that Cut&Paste part of a grouped formula adjusts references
9477 // correctly and Undo works.
9479 sc::AutoCalcSwitch
aACSwitch(*m_pDoc
, true); // turn on auto calc.
9481 m_pDoc
->InsertTab(0, u
"Test"_ustr
);
9483 // Formula data in A1:A9
9484 std::vector
<std::vector
<const char*>> aData
9485 = { { "1" }, { "=A1+A1" }, { "=A2+A1" }, { "=A3+A2" }, { "=A4+A3" },
9486 { "=A5+A4" }, { "=A6+A5" }, { "=A7+A6" }, { "=A8+A7" } };
9488 ScAddress
aPos(0, 0, 0);
9489 ScRange aDataRange
= insertRangeData(m_pDoc
, aPos
, aData
);
9490 CPPUNIT_ASSERT_EQUAL_MESSAGE("Failed to insert data", aPos
, aDataRange
.aStart
);
9492 // Check initial data.
9493 const char* aDataCheck
[][2] = { { "1", "" }, { "2", "=A1+A1" }, { "3", "=A2+A1" },
9494 { "5", "=A3+A2" }, { "8", "=A4+A3" }, { "13", "=A5+A4" },
9495 { "21", "=A6+A5" }, { "34", "=A7+A6" }, { "55", "=A8+A7" } };
9496 for (size_t i
= 0; i
< SAL_N_ELEMENTS(aDataCheck
); ++i
)
9498 OUString aString
= m_pDoc
->GetString(0, i
, 0);
9499 CPPUNIT_ASSERT_EQUAL_MESSAGE("Initial data failure",
9500 OUString::createFromAscii(aDataCheck
[i
][0]), aString
);
9501 aString
= m_pDoc
->GetFormula(0, i
, 0);
9502 CPPUNIT_ASSERT_EQUAL_MESSAGE("Initial formula failure",
9503 OUString::createFromAscii(aDataCheck
[i
][1]), aString
);
9506 ScMarkData
aMark(m_pDoc
->GetSheetLimits());
9507 aMark
.SelectOneTable(0);
9509 // Set up clip document.
9510 ScDocument
aClipDoc(SCDOCMODE_CLIP
);
9511 aClipDoc
.ResetClip(m_pDoc
, &aMark
);
9512 // Cut A4:A6 to clipboard with Undo.
9513 std::unique_ptr
<ScUndoCut
> pUndoCut(
9514 cutToClip(*m_xDocShell
, ScRange(0, 3, 0, 0, 5, 0), &aClipDoc
, true));
9516 // Check data after Cut.
9517 const char* aCutCheck
[] = { "1", "2", "3", "", "", "", "0", "0", "0" };
9518 for (size_t i
= 0; i
< SAL_N_ELEMENTS(aCutCheck
); ++i
)
9520 OUString aString
= m_pDoc
->GetString(0, i
, 0);
9521 CPPUNIT_ASSERT_EQUAL_MESSAGE("Cut data failure", OUString::createFromAscii(aCutCheck
[i
]),
9525 // Paste to B5:B7 with Undo.
9526 ScRange
aPasteRange(1, 4, 0, 1, 6, 0);
9527 aMark
.SetMarkArea(aPasteRange
);
9528 ScDocument
* pPasteUndoDoc
= new ScDocument(SCDOCMODE_UNDO
);
9529 pPasteUndoDoc
->InitUndoSelected(*m_pDoc
, aMark
);
9530 std::unique_ptr
<ScUndoPaste
> pUndoPaste(
9531 createUndoPaste(*m_xDocShell
, aPasteRange
, ScDocumentUniquePtr(pPasteUndoDoc
)));
9532 m_pDoc
->CopyFromClip(aPasteRange
, aMark
, InsertDeleteFlags::ALL
, pPasteUndoDoc
, &aClipDoc
);
9534 // Check data after Paste.
9535 const char* aPasteCheck
[][4] = { { "1", "", "", "" },
9536 { "2", "", "=A1+A1", "" },
9537 { "3", "", "=A2+A1", "" },
9539 { "", "5", "", "=A3+A2" },
9540 { "", "8", "", "=B5+A3" },
9541 { "21", "13", "=B7+B6", "=B6+B5" },
9542 { "34", "", "=A7+B7", "" },
9543 { "55", "", "=A8+A7", "" } };
9544 for (size_t i
= 0; i
< SAL_N_ELEMENTS(aPasteCheck
); ++i
)
9546 for (size_t j
= 0; j
< 2; ++j
)
9548 OUString aString
= m_pDoc
->GetString(j
, i
, 0);
9549 CPPUNIT_ASSERT_EQUAL_MESSAGE("Paste data failure",
9550 OUString::createFromAscii(aPasteCheck
[i
][j
]), aString
);
9551 aString
= m_pDoc
->GetFormula(j
, i
, 0);
9552 CPPUNIT_ASSERT_EQUAL_MESSAGE("Paste formula failure",
9553 OUString::createFromAscii(aPasteCheck
[i
][2 + j
]), aString
);
9557 // Undo Paste and check, must be same as after Cut.
9559 for (size_t i
= 0; i
< SAL_N_ELEMENTS(aCutCheck
); ++i
)
9561 OUString aString
= m_pDoc
->GetString(0, i
, 0);
9562 CPPUNIT_ASSERT_EQUAL_MESSAGE("Undo Paste data failure",
9563 OUString::createFromAscii(aCutCheck
[i
]), aString
);
9566 // Undo Cut and check, must be initial data.
9568 for (size_t i
= 0; i
< SAL_N_ELEMENTS(aDataCheck
); ++i
)
9570 OUString aString
= m_pDoc
->GetString(0, i
, 0);
9571 CPPUNIT_ASSERT_EQUAL_MESSAGE("Undo Cut data failure",
9572 OUString::createFromAscii(aDataCheck
[i
][0]), aString
);
9573 aString
= m_pDoc
->GetFormula(0, i
, 0);
9574 CPPUNIT_ASSERT_EQUAL_MESSAGE("Undo Cut formula failure",
9575 OUString::createFromAscii(aDataCheck
[i
][1]), aString
);
9578 m_pDoc
->DeleteTab(0);
9581 CPPUNIT_TEST_FIXTURE(TestCopyPaste
, testMoveRefBetweenSheets
)
9583 sc::AutoCalcSwitch
aACSwitch(*m_pDoc
, true); // turn on auto calc.
9585 m_pDoc
->InsertTab(0, u
"Test1"_ustr
);
9586 m_pDoc
->InsertTab(1, u
"Test2"_ustr
);
9588 m_pDoc
->SetValue(ScAddress(0, 0, 0), 12.0);
9589 m_pDoc
->SetValue(ScAddress(1, 0, 0), 10.0);
9590 m_pDoc
->SetValue(ScAddress(2, 0, 0), 8.0);
9591 m_pDoc
->SetString(ScAddress(0, 1, 0), u
"=A1"_ustr
);
9592 m_pDoc
->SetString(ScAddress(0, 2, 0), u
"=SUM(A1:C1)"_ustr
);
9594 CPPUNIT_ASSERT_EQUAL(12.0, m_pDoc
->GetValue(ScAddress(0, 0, 0)));
9595 CPPUNIT_ASSERT_EQUAL(12.0, m_pDoc
->GetValue(ScAddress(0, 1, 0)));
9596 CPPUNIT_ASSERT_EQUAL(30.0, m_pDoc
->GetValue(ScAddress(0, 2, 0)));
9598 // These formulas should not display the sheet name.
9599 CPPUNIT_ASSERT_EQUAL_MESSAGE("Wrong formula!", u
"=A1"_ustr
, m_pDoc
->GetFormula(0, 1, 0));
9600 CPPUNIT_ASSERT_EQUAL_MESSAGE("Wrong formula!", u
"=SUM(A1:C1)"_ustr
,
9601 m_pDoc
->GetFormula(0, 2, 0));
9603 // Move Test1.A2:A3 to Test2.A2:A3.
9604 ScDocFunc
& rFunc
= m_xDocShell
->GetDocFunc();
9606 = rFunc
.MoveBlock(ScRange(0, 1, 0, 0, 2, 0), ScAddress(0, 1, 1), true, true, false, true);
9607 CPPUNIT_ASSERT(bMoved
);
9609 CPPUNIT_ASSERT_EQUAL_MESSAGE("This cell should be empty after the move.", CELLTYPE_NONE
,
9610 m_pDoc
->GetCellType(ScAddress(0, 1, 0)));
9611 ASSERT_DOUBLES_EQUAL(12.0, m_pDoc
->GetValue(ScAddress(0, 1, 1)));
9612 ASSERT_DOUBLES_EQUAL(30.0, m_pDoc
->GetValue(ScAddress(0, 2, 1)));
9614 // The reference in the pasted formula should display sheet name after the move.
9615 CPPUNIT_ASSERT_EQUAL_MESSAGE("Wrong formula!", u
"=Test1.A1"_ustr
, m_pDoc
->GetFormula(0, 1, 1));
9616 CPPUNIT_ASSERT_EQUAL_MESSAGE("Wrong formula!", u
"=SUM(Test1.A1:C1)"_ustr
,
9617 m_pDoc
->GetFormula(0, 2, 1));
9619 m_pDoc
->DeleteTab(1);
9620 m_pDoc
->DeleteTab(0);
9623 CPPUNIT_TEST_FIXTURE(TestCopyPaste
, testUndoCut
)
9625 m_pDoc
->InsertTab(0, u
"Test"_ustr
);
9627 sc::AutoCalcSwitch
aACSwitch(*m_pDoc
, true); // turn on auto calc.
9629 // Insert values into A1:A3.
9630 m_pDoc
->SetValue(ScAddress(0, 0, 0), 1.0);
9631 m_pDoc
->SetValue(ScAddress(0, 1, 0), 10.0);
9632 m_pDoc
->SetValue(ScAddress(0, 2, 0), 100.0);
9635 m_pDoc
->SetString(ScAddress(0, 3, 0), u
"=SUM(A1:A3)"_ustr
);
9636 CPPUNIT_ASSERT_EQUAL(111.0, m_pDoc
->GetValue(0, 3, 0));
9639 ScMarkData
aMark(m_pDoc
->GetSheetLimits());
9640 ScRange
aRange(0, 0, 0, 0, 2, 0);
9641 aMark
.SetMarkArea(aRange
);
9642 aMark
.MarkToMulti();
9644 // Set up an undo object for cutting A1:A3.
9645 ScDocumentUniquePtr
pUndoDoc(new ScDocument(SCDOCMODE_UNDO
));
9646 pUndoDoc
->InitUndo(*m_pDoc
, 0, 0);
9647 m_pDoc
->CopyToDocument(aRange
, InsertDeleteFlags::ALL
, false, *pUndoDoc
);
9648 ASSERT_DOUBLES_EQUAL(1.0, pUndoDoc
->GetValue(ScAddress(0, 0, 0)));
9649 ASSERT_DOUBLES_EQUAL(10.0, pUndoDoc
->GetValue(ScAddress(0, 1, 0)));
9650 ASSERT_DOUBLES_EQUAL(100.0, pUndoDoc
->GetValue(ScAddress(0, 2, 0)));
9651 ScUndoCut
aUndo(m_xDocShell
.get(), aRange
, aRange
.aEnd
, aMark
, std::move(pUndoDoc
));
9653 // "Cut" the selection.
9654 m_pDoc
->DeleteSelection(InsertDeleteFlags::ALL
, aMark
);
9655 CPPUNIT_ASSERT_EQUAL(0.0, m_pDoc
->GetValue(0, 3, 0)); // The SUM should be zero after the "cut".
9657 // Undo it, and check the result.
9659 ASSERT_DOUBLES_EQUAL(1.0, m_pDoc
->GetValue(ScAddress(0, 0, 0)));
9660 ASSERT_DOUBLES_EQUAL(10.0, m_pDoc
->GetValue(ScAddress(0, 1, 0)));
9661 ASSERT_DOUBLES_EQUAL(100.0, m_pDoc
->GetValue(ScAddress(0, 2, 0)));
9662 ASSERT_DOUBLES_EQUAL(
9663 111.0, m_pDoc
->GetValue(0, 3, 0)); // The SUM value should be back to the original.
9665 // Redo it and check.
9667 ASSERT_DOUBLES_EQUAL(0.0, m_pDoc
->GetValue(0, 3, 0));
9671 ASSERT_DOUBLES_EQUAL(111.0, m_pDoc
->GetValue(0, 3, 0));
9673 m_pDoc
->DeleteTab(0);
9676 CPPUNIT_TEST_FIXTURE(TestCopyPaste
, testMoveBlock
)
9678 m_pDoc
->InsertTab(0, u
"SheetNotes"_ustr
);
9680 // We need a drawing layer in order to create caption objects.
9681 m_pDoc
->InitDrawLayer(m_xDocShell
.get());
9683 m_pDoc
->SetValue(0, 0, 0, 1);
9684 m_pDoc
->SetString(1, 0, 0, u
"=A1+1"_ustr
);
9685 m_pDoc
->SetString(2, 0, 0, u
"test"_ustr
);
9687 // add notes to A1:C1
9688 ScAddress aAddrA1
= setNote(0, 0, 0, u
"Hello world in A1"_ustr
);
9689 ScAddress aAddrB1
= setNote(1, 0, 0, u
"Hello world in B1"_ustr
);
9690 ScAddress aAddrC1
= setNote(2, 0, 0, u
"Hello world in C1"_ustr
);
9691 ScAddress
aAddrD1(3, 0, 0);
9693 // previous tests on cell note content are ok. this one fails !!! :(
9694 //CPPUNIT_ASSERT_MESSAGE("Note content in B1 before move block", m_pDoc->GetNote(aAddrB1)->GetText() == aHelloB1);
9696 // move notes to B1:D1
9697 ScDocFunc
& rDocFunc
= m_xDocShell
->GetDocFunc();
9698 bool bMoveDone
= rDocFunc
.MoveBlock(ScRange(0, 0, 0, 2, 0, 0), ScAddress(1, 0, 0),
9699 true /*bCut*/, false, false, false);
9701 CPPUNIT_ASSERT_MESSAGE("Cells not moved", bMoveDone
);
9703 //check cell content
9704 OUString aString
= m_pDoc
->GetString(3, 0, 0);
9705 CPPUNIT_ASSERT_EQUAL_MESSAGE("Cell D1 should contain: test", u
"test"_ustr
, aString
);
9706 aString
= m_pDoc
->GetFormula(2, 0, 0);
9707 CPPUNIT_ASSERT_EQUAL_MESSAGE("Cell C1 should contain an updated formula", u
"=B1+1"_ustr
,
9709 double fValue
= m_pDoc
->GetValue(aAddrB1
);
9710 ASSERT_DOUBLES_EQUAL_MESSAGE("Cell B1 should contain 1", 1, fValue
);
9712 // cell notes has been moved 1 cell right (event when overlapping)
9713 CPPUNIT_ASSERT_MESSAGE("There should be NO note on A1", !m_pDoc
->HasNote(aAddrA1
));
9714 CPPUNIT_ASSERT_MESSAGE("There should be a note on B1", m_pDoc
->HasNote(aAddrB1
));
9715 CPPUNIT_ASSERT_MESSAGE("There should be a note on C1", m_pDoc
->HasNote(aAddrC1
));
9716 CPPUNIT_ASSERT_MESSAGE("There should be a note on D1", m_pDoc
->HasNote(aAddrD1
));
9717 /* still failing, wrong content ???
9719 sNoteText = m_pDoc->GetNote(aAddrB1)->GetText();
9720 CPPUNIT_ASSERT_MESSAGE("Note content in B1", sNoteText == aHelloA1);
9721 sNoteText = m_pDoc->GetNote(aAddrC1)->GetText();
9722 CPPUNIT_ASSERT_MESSAGE("Note content in C1", sNoteText == aHelloB1);
9723 sNoteText = m_pDoc->GetNote(aAddrD1)->GetText();
9724 CPPUNIT_ASSERT_MESSAGE("Note content in D1", sNoteText == aHelloC1);
9727 m_pDoc
->DeleteTab(0);
9730 CPPUNIT_TEST_FIXTURE(TestCopyPaste
, testCopyPasteRelativeFormula
)
9732 m_pDoc
->InsertTab(0, u
"Formula"_ustr
);
9734 sc::AutoCalcSwitch
aACSwitch(*m_pDoc
, true);
9736 // Insert values to A2 and A4.
9737 m_pDoc
->SetValue(ScAddress(0, 1, 0), 1);
9738 m_pDoc
->SetValue(ScAddress(0, 3, 0), 2);
9740 // Insert formula to B4.
9741 m_pDoc
->SetString(ScAddress(1, 3, 0), u
"=A4"_ustr
);
9742 CPPUNIT_ASSERT_EQUAL(2.0, m_pDoc
->GetValue(ScAddress(1, 3, 0)));
9744 // Select and copy B3:B4 to the clipboard.
9745 ScRange
aRange(1, 2, 0, 1, 3, 0);
9746 ScClipParam
aClipParam(aRange
, false);
9747 ScMarkData
aMark(m_pDoc
->GetSheetLimits());
9748 aMark
.SetMarkArea(aRange
);
9749 ScDocument
aClipDoc(SCDOCMODE_CLIP
);
9750 m_pDoc
->CopyToClip(aClipParam
, &aClipDoc
, &aMark
, false, false);
9752 // Paste it to B1:B2.
9753 InsertDeleteFlags nFlags
= InsertDeleteFlags::ALL
;
9754 ScRange
aDestRange(1, 0, 0, 1, 1, 0);
9755 aMark
.SetMarkArea(aDestRange
);
9756 m_pDoc
->CopyFromClip(aDestRange
, aMark
, nFlags
, nullptr, &aClipDoc
);
9758 // B2 references A2, so the value should be 1.
9759 CPPUNIT_ASSERT_EQUAL(1.0, m_pDoc
->GetValue(ScAddress(1, 1, 0)));
9761 // Clear content and start over.
9762 clearSheet(m_pDoc
, 0);
9763 clearSheet(&aClipDoc
, 0);
9765 // Insert a single formula cell in A1.
9766 m_pDoc
->SetString(ScAddress(0, 0, 0), u
"=ROW()"_ustr
);
9767 const ScFormulaCell
* pFC
= m_pDoc
->GetFormulaCell(ScAddress(0, 0, 0));
9768 CPPUNIT_ASSERT(pFC
);
9769 CPPUNIT_ASSERT(!pFC
->IsShared()); // single formula cell is never shared.
9771 // Copy A1 to clipboard.
9772 aClipParam
= ScClipParam(ScAddress(0, 0, 0), false);
9773 m_pDoc
->CopyToClip(aClipParam
, &aClipDoc
, &aMark
, false, false);
9775 pFC
= aClipDoc
.GetFormulaCell(ScAddress(0, 0, 0));
9776 CPPUNIT_ASSERT(pFC
);
9777 CPPUNIT_ASSERT(!pFC
->IsShared());
9780 aDestRange
= ScRange(0, 2, 0, 0, 2, 0);
9781 aMark
.SetMarkArea(aDestRange
);
9782 m_pDoc
->CopyFromClip(aDestRange
, aMark
, nFlags
, nullptr, &aClipDoc
);
9784 pFC
= m_pDoc
->GetFormulaCell(ScAddress(0, 2, 0));
9785 CPPUNIT_ASSERT(pFC
);
9786 CPPUNIT_ASSERT(!pFC
->IsShared());
9788 // Delete A3 and make sure it doesn't crash (see fdo#76132).
9789 clearRange(m_pDoc
, ScAddress(0, 2, 0));
9790 CPPUNIT_ASSERT_EQUAL(CELLTYPE_NONE
, m_pDoc
->GetCellType(ScAddress(0, 2, 0)));
9792 m_pDoc
->DeleteTab(0);
9795 CPPUNIT_TEST_FIXTURE(TestCopyPaste
, testCopyPasteRepeatOneFormula
)
9797 sc::AutoCalcSwitch
aACSwitch(*m_pDoc
, true);
9799 m_pDoc
->InsertTab(0, u
"Test"_ustr
);
9801 ScDocument
aClipDoc(SCDOCMODE_CLIP
);
9802 ScMarkData
aMark(m_pDoc
->GetSheetLimits());
9804 // Insert values in A1:B10.
9805 for (SCROW i
= 0; i
< 10; ++i
)
9807 m_pDoc
->SetValue(ScAddress(0, i
, 0), i
+ 1.0); // column A
9808 m_pDoc
->SetValue(ScAddress(1, i
, 0), (i
+ 1.0) * 10.0); // column B
9811 // Insert a formula in C1.
9812 ScAddress
aPos(2, 0, 0); // C1
9813 m_pDoc
->SetString(aPos
, u
"=SUM(A1:B1)"_ustr
);
9814 CPPUNIT_ASSERT_EQUAL(11.0, m_pDoc
->GetValue(aPos
));
9816 // This check makes only sense if group listeners are activated.
9817 #if !defined(USE_FORMULA_GROUP_LISTENER) || USE_FORMULA_GROUP_LISTENER
9818 // At this point, there should be only one normal area listener listening
9820 ScRange
aWholeSheet(0, 0, 0, m_pDoc
->MaxCol(), m_pDoc
->MaxRow(), 0);
9821 ScBroadcastAreaSlotMachine
* pBASM
= m_pDoc
->GetBASM();
9822 CPPUNIT_ASSERT(pBASM
);
9823 std::vector
<sc::AreaListener
> aListeners
9824 = pBASM
->GetAllListeners(aWholeSheet
, sc::AreaOverlapType::Inside
);
9825 CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(1), aListeners
.size());
9826 const sc::AreaListener
* pListener
= aListeners
.data();
9827 CPPUNIT_ASSERT_EQUAL(ScRange(0, 0, 0, 1, 0, 0), pListener
->maArea
);
9828 CPPUNIT_ASSERT_MESSAGE("This listener shouldn't be a group listener.",
9829 !pListener
->mbGroupListening
);
9832 // Copy C1 to clipboard.
9833 ScClipParam
aClipParam(aPos
, false);
9834 aMark
.SetMarkArea(aPos
);
9835 m_pDoc
->CopyToClip(aClipParam
, &aClipDoc
, &aMark
, false, false);
9837 // Paste it to C2:C10.
9838 ScRange
aDestRange(2, 1, 0, 2, 9, 0);
9839 aMark
.SetMarkArea(aDestRange
);
9840 m_pDoc
->CopyFromClip(aDestRange
, aMark
, InsertDeleteFlags::CONTENTS
, nullptr, &aClipDoc
);
9842 // Make sure C1:C10 are grouped.
9843 const ScFormulaCell
* pFC
= m_pDoc
->GetFormulaCell(aPos
);
9844 CPPUNIT_ASSERT(pFC
);
9845 CPPUNIT_ASSERT_EQUAL(static_cast<SCROW
>(10), pFC
->GetSharedLength());
9847 // Check the formula results.
9848 for (SCROW i
= 0; i
< 10; ++i
)
9850 double fExpected
= (i
+ 1.0) * 11.0;
9851 CPPUNIT_ASSERT_EQUAL(fExpected
, m_pDoc
->GetValue(ScAddress(2, i
, 0)));
9854 // This check makes only sense if group listeners are activated.
9855 #if !defined(USE_FORMULA_GROUP_LISTENER) || USE_FORMULA_GROUP_LISTENER
9856 // At this point, there should only be one area listener and it should be
9857 // a group listener listening on A1:B10.
9858 aListeners
= pBASM
->GetAllListeners(aWholeSheet
, sc::AreaOverlapType::Inside
);
9859 CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(1), aListeners
.size());
9860 pListener
= aListeners
.data();
9861 CPPUNIT_ASSERT_EQUAL(ScRange(0, 0, 0, 1, 9, 0), pListener
->maArea
);
9862 CPPUNIT_ASSERT_MESSAGE("This listener should be a group listener.",
9863 pListener
->mbGroupListening
);
9866 // Insert a new row at row 1.
9867 ScRange
aRowOne(0, 0, 0, m_pDoc
->MaxCol(), 0, 0);
9868 aMark
.SetMarkArea(aRowOne
);
9869 ScDocFunc
& rFunc
= m_xDocShell
->GetDocFunc();
9870 rFunc
.InsertCells(aRowOne
, &aMark
, INS_INSROWS_BEFORE
, true, true);
9872 CPPUNIT_ASSERT_EQUAL_MESSAGE("C1 should be empty.", CELLTYPE_NONE
,
9873 m_pDoc
->GetCellType(ScAddress(2, 0, 0)));
9875 // This check makes only sense if group listeners are activated.
9876 #if !defined(USE_FORMULA_GROUP_LISTENER) || USE_FORMULA_GROUP_LISTENER
9877 // Make there we only have one group area listener listening on A2:B11.
9878 aListeners
= pBASM
->GetAllListeners(aWholeSheet
, sc::AreaOverlapType::Inside
);
9879 CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(1), aListeners
.size());
9880 pListener
= aListeners
.data();
9881 CPPUNIT_ASSERT_EQUAL(ScRange(0, 1, 0, 1, 10, 0), pListener
->maArea
);
9882 CPPUNIT_ASSERT_MESSAGE("This listener should be a group listener.",
9883 pListener
->mbGroupListening
);
9886 // Check the formula results.
9887 for (SCROW i
= 0; i
< 10; ++i
)
9889 double fExpected
= (i
+ 1.0) * 11.0;
9890 CPPUNIT_ASSERT_EQUAL(fExpected
, m_pDoc
->GetValue(ScAddress(2, i
+ 1, 0)));
9893 // Delete row at row 1 to shift the cells up.
9894 rFunc
.DeleteCells(aRowOne
, &aMark
, DelCellCmd::Rows
, true);
9896 // Check the formula results again.
9897 for (SCROW i
= 0; i
< 10; ++i
)
9899 double fExpected
= (i
+ 1.0) * 11.0;
9900 CPPUNIT_ASSERT_EQUAL(fExpected
, m_pDoc
->GetValue(ScAddress(2, i
, 0)));
9903 // This check makes only sense if group listeners are activated.
9904 #if !defined(USE_FORMULA_GROUP_LISTENER) || USE_FORMULA_GROUP_LISTENER
9905 // Check the group area listener again to make sure it's listening on A1:B10 once again.
9906 aListeners
= pBASM
->GetAllListeners(aWholeSheet
, sc::AreaOverlapType::Inside
);
9907 CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(1), aListeners
.size());
9908 pListener
= aListeners
.data();
9909 CPPUNIT_ASSERT_EQUAL(ScRange(0, 0, 0, 1, 9, 0), pListener
->maArea
);
9910 CPPUNIT_ASSERT_MESSAGE("This listener should be a group listener.",
9911 pListener
->mbGroupListening
);
9914 m_pDoc
->DeleteTab(0);
9917 CPPUNIT_TEST_FIXTURE(TestCopyPaste
, testCopyPasteMixedReferenceFormula
)
9919 sc::AutoCalcSwitch
aAC(*m_pDoc
, true); // turn on auto calc.
9920 m_pDoc
->InsertTab(0, u
"Test"_ustr
);
9922 // Insert value to C3
9923 m_pDoc
->SetValue(2, 2, 0, 1.0);
9925 // Insert formula to A1 with mixed relative/absolute addressing.
9926 m_pDoc
->SetString(0, 0, 0, u
"=SUM(B:$C)"_ustr
);
9927 CPPUNIT_ASSERT_EQUAL_MESSAGE("Wrong formula.", u
"=SUM(B:$C)"_ustr
, m_pDoc
->GetFormula(0, 0, 0));
9928 CPPUNIT_ASSERT_EQUAL(1.0, m_pDoc
->GetValue(0, 0, 0));
9930 // Copy formula in A1 to clipboard.
9931 ScRange
aRange(ScAddress(0, 0, 0));
9932 ScDocument
aClipDoc(SCDOCMODE_CLIP
);
9933 copyToClip(m_pDoc
, aRange
, &aClipDoc
);
9935 // Paste formula to B1.
9936 aRange
= ScAddress(1, 0, 0);
9937 pasteFromClip(m_pDoc
, aRange
, &aClipDoc
);
9938 CPPUNIT_ASSERT_EQUAL_MESSAGE("Wrong formula.", u
"=SUM(C:$C)"_ustr
, m_pDoc
->GetFormula(1, 0, 0));
9939 CPPUNIT_ASSERT_EQUAL(2.0, m_pDoc
->GetValue(0, 0, 0));
9940 CPPUNIT_ASSERT_EQUAL(1.0, m_pDoc
->GetValue(1, 0, 0));
9942 // Paste formula to C1. All three results now must be circular reference.
9943 aRange
= ScAddress(2, 0, 0);
9944 pasteFromClip(m_pDoc
, aRange
, &aClipDoc
);
9945 CPPUNIT_ASSERT_EQUAL_MESSAGE("Wrong formula.", u
"=SUM($C:D)"_ustr
,
9946 m_pDoc
->GetFormula(2, 0, 0)); // reference put in order
9947 CPPUNIT_ASSERT_EQUAL(u
"Err:522"_ustr
, m_pDoc
->GetString(0, 0, 0));
9948 CPPUNIT_ASSERT_EQUAL(u
"Err:522"_ustr
, m_pDoc
->GetString(1, 0, 0));
9949 CPPUNIT_ASSERT_EQUAL(u
"Err:522"_ustr
, m_pDoc
->GetString(2, 0, 0));
9951 m_pDoc
->DeleteTab(0);
9954 CPPUNIT_TEST_FIXTURE(TestCopyPaste
, testCopyPasteFormulas
)
9956 m_pDoc
->InsertTab(0, u
"Sheet1"_ustr
);
9957 m_pDoc
->InsertTab(1, u
"Sheet2"_ustr
);
9959 m_pDoc
->SetString(0, 0, 0, u
"=COLUMN($A$1)"_ustr
);
9960 m_pDoc
->SetString(0, 1, 0, u
"=$A$1+B2"_ustr
);
9961 m_pDoc
->SetString(0, 2, 0, u
"=$Sheet2.A1"_ustr
);
9962 m_pDoc
->SetString(0, 3, 0, u
"=$Sheet2.$A$1"_ustr
);
9963 m_pDoc
->SetString(0, 4, 0, u
"=$Sheet2.A$1"_ustr
);
9965 // to prevent ScEditableTester in ScDocFunc::MoveBlock
9966 ASSERT_DOUBLES_EQUAL(1.0, m_pDoc
->GetValue(0, 0, 0));
9967 ASSERT_DOUBLES_EQUAL(1.0, m_pDoc
->GetValue(0, 1, 0));
9968 ScDocFunc
& rDocFunc
= m_xDocShell
->GetDocFunc();
9969 bool bMoveDone
= rDocFunc
.MoveBlock(ScRange(0, 0, 0, 0, 4, 0), ScAddress(10, 10, 0), false,
9970 false, false, true);
9972 // check that moving was successful, mainly for editable tester
9973 CPPUNIT_ASSERT(bMoveDone
);
9974 ASSERT_DOUBLES_EQUAL(1.0, m_pDoc
->GetValue(10, 10, 0));
9975 ASSERT_DOUBLES_EQUAL(1.0, m_pDoc
->GetValue(10, 11, 0));
9976 CPPUNIT_ASSERT_EQUAL(u
"=COLUMN($A$1)"_ustr
, m_pDoc
->GetFormula(10, 10, 0));
9977 CPPUNIT_ASSERT_EQUAL(u
"=$A$1+L12"_ustr
, m_pDoc
->GetFormula(10, 11, 0));
9978 CPPUNIT_ASSERT_EQUAL(u
"=$Sheet2.K11"_ustr
, m_pDoc
->GetFormula(10, 12, 0));
9979 CPPUNIT_ASSERT_EQUAL(u
"=$Sheet2.$A$1"_ustr
, m_pDoc
->GetFormula(10, 13, 0));
9980 CPPUNIT_ASSERT_EQUAL(u
"=$Sheet2.K$1"_ustr
, m_pDoc
->GetFormula(10, 14, 0));
9983 CPPUNIT_TEST_FIXTURE(TestCopyPaste
, testCopyPasteFormulasExternalDoc
)
9985 SfxMedium
* pMedium
= new SfxMedium(u
"file:///source.fake"_ustr
, StreamMode::STD_READWRITE
);
9986 m_xDocShell
->DoLoad(pMedium
);
9988 ScDocShellRef xExtDocSh
= new ScDocShell
;
9989 OUString
constexpr aExtDocName(u
"file:///extdata.fake"_ustr
);
9990 SfxMedium
* pMed
= new SfxMedium(aExtDocName
, StreamMode::STD_READWRITE
);
9991 xExtDocSh
->DoLoad(pMed
);
9992 CPPUNIT_ASSERT_MESSAGE("external document instance not loaded.",
9993 findLoadedDocShellByName(aExtDocName
) != nullptr);
9995 ScDocument
& rExtDoc
= xExtDocSh
->GetDocument();
9996 rExtDoc
.InsertTab(0, u
"ExtSheet1"_ustr
);
9997 rExtDoc
.InsertTab(1, u
"ExtSheet2"_ustr
);
9999 m_pDoc
->InsertTab(0, u
"Sheet1"_ustr
);
10000 m_pDoc
->InsertTab(1, u
"Sheet2"_ustr
);
10002 m_pDoc
->SetString(0, 0, 0, u
"=COLUMN($A$1)"_ustr
);
10003 m_pDoc
->SetString(0, 1, 0, u
"=$A$1+B2"_ustr
);
10004 m_pDoc
->SetString(0, 2, 0, u
"=$Sheet2.A1"_ustr
);
10005 m_pDoc
->SetString(0, 3, 0, u
"=$Sheet2.$A$1"_ustr
);
10006 m_pDoc
->SetString(0, 4, 0, u
"=$Sheet2.A$1"_ustr
);
10007 m_pDoc
->SetString(0, 5, 0, u
"=$Sheet1.$A$1"_ustr
);
10009 ScRange
aRange(0, 0, 0, 0, 5, 0);
10010 ScClipParam
aClipParam(aRange
, false);
10011 ScMarkData
aMark(m_pDoc
->GetSheetLimits());
10012 aMark
.SetMarkArea(aRange
);
10013 ScDocument
aClipDoc(SCDOCMODE_CLIP
);
10014 m_pDoc
->CopyToClip(aClipParam
, &aClipDoc
, &aMark
, false, false);
10016 aRange
= ScRange(1, 1, 1, 1, 6, 1);
10017 ScMarkData
aMarkData2(m_pDoc
->GetSheetLimits());
10018 aMarkData2
.SetMarkArea(aRange
);
10019 rExtDoc
.CopyFromClip(aRange
, aMarkData2
, InsertDeleteFlags::ALL
, nullptr, &aClipDoc
);
10021 OUString aFormula
= rExtDoc
.GetFormula(1, 1, 1);
10022 //adjust absolute refs pointing to the copy area
10023 CPPUNIT_ASSERT_EQUAL(u
"=COLUMN($B$2)"_ustr
, aFormula
);
10024 aFormula
= rExtDoc
.GetFormula(1, 2, 1);
10025 //adjust absolute refs and keep relative refs
10026 CPPUNIT_ASSERT_EQUAL(u
"=$B$2+C3"_ustr
, aFormula
);
10027 aFormula
= rExtDoc
.GetFormula(1, 3, 1);
10028 // make absolute sheet refs external refs
10029 CPPUNIT_ASSERT_EQUAL(u
"='file:///source.fake'#$Sheet2.B2"_ustr
, aFormula
);
10030 aFormula
= rExtDoc
.GetFormula(1, 4, 1);
10031 CPPUNIT_ASSERT_EQUAL(u
"='file:///source.fake'#$Sheet2.$A$1"_ustr
, aFormula
);
10032 aFormula
= rExtDoc
.GetFormula(1, 5, 1);
10033 CPPUNIT_ASSERT_EQUAL(u
"='file:///source.fake'#$Sheet2.B$1"_ustr
, aFormula
);
10034 aFormula
= rExtDoc
.GetFormula(1, 6, 1);
10035 CPPUNIT_ASSERT_EQUAL(u
"=$ExtSheet2.$B$2"_ustr
, aFormula
);
10037 xExtDocSh
->DoClose();
10040 CPPUNIT_TEST_FIXTURE(TestCopyPaste
, testCopyPasteReferencesExternalDoc
)
10042 SfxMedium
* pMedium
= new SfxMedium(u
"file:///source.fake"_ustr
, StreamMode::STD_READWRITE
);
10043 m_xDocShell
->DoLoad(pMedium
);
10045 ScDocShellRef xExtDocSh
= new ScDocShell
;
10046 OUString
aExtDocName(u
"file:///extdata.fake"_ustr
);
10047 SfxMedium
* pMed
= new SfxMedium(aExtDocName
, StreamMode::STD_READWRITE
);
10048 xExtDocSh
->DoLoad(pMed
);
10049 CPPUNIT_ASSERT_MESSAGE("external document instance not loaded.",
10050 findLoadedDocShellByName(aExtDocName
) != nullptr);
10052 ScDocument
& rExtDoc
= xExtDocSh
->GetDocument();
10053 rExtDoc
.InsertTab(0, u
"ExtSheet1"_ustr
);
10055 m_pDoc
->InsertTab(0, u
"Sheet1"_ustr
);
10057 m_pDoc
->SetString(0, 5, 0, u
"=SUM($Sheet1.A1:A5)"_ustr
);
10059 ScRange
aRange(0, 2, 0, 0, 5, 0);
10060 ScClipParam
aClipParam(aRange
, false);
10061 ScMarkData
aMark(m_pDoc
->GetSheetLimits());
10062 aMark
.SetMarkArea(aRange
);
10063 ScDocument
aClipDoc(SCDOCMODE_CLIP
);
10064 m_pDoc
->CopyToClip(aClipParam
, &aClipDoc
, &aMark
, false, false);
10066 aRange
= ScRange(0, 0, 0, 0, 3, 0);
10067 ScMarkData
aMarkData2(m_pDoc
->GetSheetLimits());
10068 aMarkData2
.SetMarkArea(aRange
);
10069 rExtDoc
.CopyFromClip(aRange
, aMarkData2
, InsertDeleteFlags::ALL
, nullptr, &aClipDoc
);
10071 OUString aFormula
= rExtDoc
.GetFormula(0, 3, 0);
10072 //adjust absolute refs pointing to the copy area
10073 CPPUNIT_ASSERT_EQUAL(u
"=SUM('file:///source.fake'#$Sheet1.A#REF!:A3)"_ustr
, aFormula
);
10075 xExtDocSh
->DoClose();
10078 CPPUNIT_TEST_FIXTURE(TestCopyPaste
, testTdf68976
)
10080 const SCTAB nTab
= 0;
10081 m_pDoc
->InsertTab(nTab
, u
"Test"_ustr
);
10083 m_pDoc
->SetValue(0, 0, nTab
, 1.0); // A1
10084 m_pDoc
->SetString(0, 1, nTab
, u
"=$A$1"_ustr
); // A2
10085 m_pDoc
->SetValue(0, 2, nTab
, 1000.0); // A3
10087 // Cut A3 to the clip document.
10088 ScDocument
aClipDoc(SCDOCMODE_CLIP
);
10089 ScRange
aSrcRange(0, 2, nTab
, 0, 2, nTab
);
10090 cutToClip(*m_xDocShell
, aSrcRange
, &aClipDoc
, false); // A3
10092 ScRange
aDestRange(1, 3, nTab
, 1, 3, nTab
); // B4
10093 ScMarkData
aDestMark(m_pDoc
->GetSheetLimits());
10096 ScDocument
* pOrigClipDoc
= &aClipDoc
;
10097 ScDocumentUniquePtr
pTransClip(new ScDocument(SCDOCMODE_CLIP
));
10098 aClipDoc
.TransposeClip(pTransClip
.get(), InsertDeleteFlags::ALL
, false, true);
10099 aDestMark
.SetMarkArea(aDestRange
);
10101 m_pDoc
->CopyFromClip(aDestRange
, aDestMark
, InsertDeleteFlags::ALL
, nullptr, pTransClip
.get(),
10102 true, false, true, false);
10103 m_pDoc
->UpdateTranspose(aDestRange
.aStart
, pOrigClipDoc
, aDestMark
, nullptr);
10104 pTransClip
.reset();
10107 CPPUNIT_ASSERT_EQUAL(1.0, m_pDoc
->GetValue(0, 0, nTab
)); // A1
10108 // Without the fix in place, this would have failed with
10109 // - Expected: =$A$1
10110 // - Actual : =$B$4
10111 CPPUNIT_ASSERT_EQUAL_MESSAGE("Wrong formula", u
"=$A$1"_ustr
, m_pDoc
->GetFormula(0, 1, nTab
));
10112 // Without the fix in place, this would have failed with
10115 CPPUNIT_ASSERT_EQUAL(1.0, m_pDoc
->GetValue(0, 1, nTab
)); // A2
10116 CPPUNIT_ASSERT_EQUAL(0.0, m_pDoc
->GetValue(0, 2, nTab
)); // A3
10117 CPPUNIT_ASSERT_EQUAL(1000.0, m_pDoc
->GetValue(1, 3, nTab
)); // B4
10120 CPPUNIT_TEST_FIXTURE(TestCopyPaste
, testTdf71058
)
10122 const SCTAB nTab
= 0;
10123 m_pDoc
->InsertTab(nTab
, u
"Test"_ustr
);
10125 m_pDoc
->SetString(2, 2, nTab
, u
"=C4"_ustr
); // C3
10126 m_pDoc
->SetString(3, 2, nTab
, u
"=D4"_ustr
); // D3
10127 m_pDoc
->SetValue(2, 3, nTab
, 1.0); // C4
10128 m_pDoc
->SetValue(3, 3, nTab
, 2.0); // D4
10130 // Cut C4:C5 to the clip document.
10131 ScDocument
aClipDoc(SCDOCMODE_CLIP
);
10132 ScRange
aSrcRange(2, 3, nTab
, 3, 3, nTab
);
10133 cutToClip(*m_xDocShell
, aSrcRange
, &aClipDoc
, false);
10136 ScRange
aDestRange(4, 5, nTab
, 4, 6, nTab
);
10137 ScMarkData
aDestMark(m_pDoc
->GetSheetLimits());
10140 ScDocument
* pOrigClipDoc
= &aClipDoc
;
10141 ScDocumentUniquePtr
pTransClip(new ScDocument(SCDOCMODE_CLIP
));
10142 aClipDoc
.TransposeClip(pTransClip
.get(), InsertDeleteFlags::ALL
, false, true);
10143 aDestMark
.SetMarkArea(aDestRange
);
10145 m_pDoc
->CopyFromClip(aDestRange
, aDestMark
, InsertDeleteFlags::ALL
, nullptr, pTransClip
.get(),
10146 true, false, true, false);
10147 m_pDoc
->UpdateTranspose(aDestRange
.aStart
, pOrigClipDoc
, aDestMark
, nullptr);
10148 pTransClip
.reset();
10150 // Check precondition
10151 CPPUNIT_ASSERT_EQUAL(1.0, m_pDoc
->GetValue(4, 5, nTab
));
10152 CPPUNIT_ASSERT_EQUAL(2.0, m_pDoc
->GetValue(4, 6, nTab
));
10155 // Without the fix in place, this would have failed with
10158 CPPUNIT_ASSERT_EQUAL_MESSAGE("Wrong formula", u
"=E6"_ustr
, m_pDoc
->GetFormula(2, 2, nTab
));
10159 // Without the fix in place, this would have failed with
10162 CPPUNIT_ASSERT_EQUAL(1.0, m_pDoc
->GetValue(2, 2, nTab
));
10164 // Without the fix in place, this would have failed with
10167 CPPUNIT_ASSERT_EQUAL_MESSAGE("Wrong formula", u
"=E7"_ustr
, m_pDoc
->GetFormula(3, 2, nTab
));
10168 // Without the fix in place, this would have failed with
10171 CPPUNIT_ASSERT_EQUAL(2.0, m_pDoc
->GetValue(3, 2, nTab
));
10174 CPPUNIT_TEST_FIXTURE(TestCopyPaste
, testTdf149554
)
10176 const SCTAB nTab
= 0;
10177 m_pDoc
->InsertTab(nTab
, u
"Test"_ustr
);
10179 // Cut C4:C5 to the clip document.
10180 ScDocument
aClipDoc(SCDOCMODE_CLIP
);
10181 ScRange
aSrcRange(2, 3, nTab
, 3, 3, nTab
);
10182 cutToClip(*m_xDocShell
, aSrcRange
, &aClipDoc
, false);
10185 ScRange
aDestRange(4, 5, nTab
, 4, 6, nTab
);
10186 ScMarkData
aDestMark(m_pDoc
->GetSheetLimits());
10189 ScDocument
* pOrigClipDoc
= &aClipDoc
;
10190 ScDocumentUniquePtr
pTransClip(new ScDocument(SCDOCMODE_CLIP
));
10191 aClipDoc
.TransposeClip(pTransClip
.get(), InsertDeleteFlags::ALL
, false, true);
10192 aDestMark
.SetMarkArea(aDestRange
);
10193 // Paste. Without the fix in place, this test would have crashed here
10194 m_pDoc
->CopyFromClip(aDestRange
, aDestMark
, InsertDeleteFlags::ALL
, nullptr, pTransClip
.get(),
10195 true, false, true, false);
10196 m_pDoc
->UpdateTranspose(aDestRange
.aStart
, pOrigClipDoc
, aDestMark
, nullptr);
10197 pTransClip
.reset();
10199 m_pDoc
->DeleteTab(0);
10202 CPPUNIT_TEST_FIXTURE(TestCopyPaste
, testMixData
)
10204 m_pDoc
->InsertTab(0, u
"Test"_ustr
);
10206 m_pDoc
->SetValue(ScAddress(1, 0, 0), 2.0); // B1
10207 m_pDoc
->SetValue(ScAddress(0, 1, 0), 3.0); // A2
10209 // Copy A1:B1 to the clip document.
10210 ScDocument
aClipDoc(SCDOCMODE_CLIP
);
10211 copyToClip(m_pDoc
, ScRange(0, 0, 0, 1, 0, 0), &aClipDoc
); // A1:B1
10213 // Copy A2:B2 to the mix document (for arithmetic paste).
10214 ScDocument
aMixDoc(SCDOCMODE_CLIP
);
10215 copyToClip(m_pDoc
, ScRange(0, 1, 0, 1, 1, 0), &aMixDoc
); // A2:B2
10217 // Paste A1:B1 to A2:B2 and perform addition.
10218 pasteFromClip(m_pDoc
, ScRange(0, 1, 0, 1, 1, 0), &aClipDoc
);
10219 m_pDoc
->MixDocument(ScRange(0, 1, 0, 1, 1, 0), ScPasteFunc::ADD
, false, aMixDoc
);
10221 CPPUNIT_ASSERT_EQUAL(3.0, m_pDoc
->GetValue(0, 1, 0)); // A2
10222 CPPUNIT_ASSERT_EQUAL(2.0, m_pDoc
->GetValue(1, 1, 0)); // B2
10224 // Clear everything and start over.
10225 clearSheet(m_pDoc
, 0);
10226 clearSheet(&aClipDoc
, 0);
10227 clearSheet(&aMixDoc
, 0);
10229 // Set values to A1, A2, and B1. B2 will remain empty.
10230 m_pDoc
->SetValue(ScAddress(0, 0, 0), 15.0);
10231 m_pDoc
->SetValue(ScAddress(0, 1, 0), 16.0);
10232 m_pDoc
->SetValue(ScAddress(1, 0, 0), 12.0);
10233 CPPUNIT_ASSERT_EQUAL_MESSAGE("B2 should be empty.", CELLTYPE_NONE
,
10234 m_pDoc
->GetCellType(ScAddress(1, 1, 0)));
10236 // Copy A1:A2 and paste it onto B1:B2 with subtraction operation.
10237 copyToClip(m_pDoc
, ScRange(0, 0, 0, 0, 1, 0), &aClipDoc
);
10238 CPPUNIT_ASSERT_EQUAL(m_pDoc
->GetValue(ScAddress(0, 0, 0)),
10239 aClipDoc
.GetValue(ScAddress(0, 0, 0)));
10240 CPPUNIT_ASSERT_EQUAL(m_pDoc
->GetValue(ScAddress(0, 1, 0)),
10241 aClipDoc
.GetValue(ScAddress(0, 1, 0)));
10243 copyToClip(m_pDoc
, ScRange(1, 0, 0, 1, 1, 0), &aMixDoc
);
10244 CPPUNIT_ASSERT_EQUAL(m_pDoc
->GetValue(ScAddress(1, 0, 0)),
10245 aMixDoc
.GetValue(ScAddress(1, 0, 0)));
10246 CPPUNIT_ASSERT_EQUAL(m_pDoc
->GetValue(ScAddress(1, 1, 0)),
10247 aMixDoc
.GetValue(ScAddress(1, 1, 0)));
10249 pasteFromClip(m_pDoc
, ScRange(1, 0, 0, 1, 1, 0), &aClipDoc
);
10250 m_pDoc
->MixDocument(ScRange(1, 0, 0, 1, 1, 0), ScPasteFunc::SUB
, false, aMixDoc
);
10252 CPPUNIT_ASSERT_EQUAL(-3.0, m_pDoc
->GetValue(ScAddress(1, 0, 0))); // 12 - 15
10253 CPPUNIT_ASSERT_EQUAL(-16.0, m_pDoc
->GetValue(ScAddress(1, 1, 0))); // 0 - 16
10255 m_pDoc
->DeleteTab(0);
10258 CPPUNIT_TEST_FIXTURE(TestCopyPaste
, testMixDataAsLinkTdf116413
)
10260 sc::AutoCalcSwitch
aACSwitch(*m_pDoc
, true); // turn on auto calculation.
10262 const SCTAB nTab
= 0;
10263 m_pDoc
->InsertTab(nTab
, u
"Test"_ustr
);
10265 // Scenario 1: Past "As Link" and "Add" operation (as described in tdf#116413)
10266 m_pDoc
->SetValue(0, 0, nTab
, 1.0); // A1
10267 m_pDoc
->SetValue(0, 1, nTab
, 1000.0); // A2
10269 // Copy A1 to the clip document.
10270 ScDocument
aClipDoc(SCDOCMODE_CLIP
);
10271 copyToClip(m_pDoc
, ScRange(0, 0, nTab
, 0, 0, nTab
), &aClipDoc
); // A1
10273 ScRange
aDestRange(0, 1, nTab
, 0, 1, nTab
);
10274 // Copy A2 to the mix document (for arithmetic paste).
10275 ScDocument
aMixDoc(SCDOCMODE_CLIP
);
10276 copyToClip(m_pDoc
, aDestRange
, &aMixDoc
); // A2
10278 // Paste A1 to A2 "As Link" and perform addition.
10279 ScMarkData
aMark(m_pDoc
->GetSheetLimits());
10280 aMark
.SetMarkArea(aDestRange
);
10281 m_pDoc
->CopyFromClip(aDestRange
, aMark
, InsertDeleteFlags::ALL
, nullptr, &aClipDoc
, true, true);
10283 m_pDoc
->MixDocument(aDestRange
, ScPasteFunc::ADD
, false, aMixDoc
);
10285 // Test precondition
10286 CPPUNIT_ASSERT_EQUAL(1001.0, m_pDoc
->GetValue(0, 1, nTab
)); // A2
10287 CPPUNIT_ASSERT_EQUAL(u
"=1000+($Test.$A$1)"_ustr
, m_pDoc
->GetFormula(0, 1, nTab
));
10289 // Change A1 from 1.0 to 2.0 (auto calculation is triggered)
10290 m_pDoc
->SetValue(0, 0, nTab
, 2.0); // A1
10292 // Without the fix in place, this would have failed with
10293 // - Expected: =1002
10294 // - Actual : =1001
10295 CPPUNIT_ASSERT_EQUAL(1002.0, m_pDoc
->GetValue(0, 1, nTab
)); // A2
10296 CPPUNIT_ASSERT_EQUAL(u
"=1000+($Test.$A$1)"_ustr
, m_pDoc
->GetFormula(0, 1, nTab
));
10298 // Clear everything and start over.
10299 clearSheet(m_pDoc
, nTab
);
10300 clearSheet(&aClipDoc
, nTab
);
10301 clearSheet(&aMixDoc
, nTab
);
10303 // Scenario 2: Like Scenario 1, but with a range (3 columns)
10304 m_pDoc
->InsertTab(nTab
, u
"Test"_ustr
);
10306 m_pDoc
->SetValue(0, 0, nTab
, 1.0); // A1
10307 m_pDoc
->SetValue(0, 1, nTab
, 1000.0); // A2
10308 m_pDoc
->SetValue(1, 0, nTab
, 1.0); // B1
10309 m_pDoc
->SetValue(1, 1, nTab
, 1000.0); // B2
10310 m_pDoc
->SetValue(2, 0, nTab
, 1.0); // C1
10311 m_pDoc
->SetValue(2, 1, nTab
, 1000.0); // C2
10313 // Copy A1:C1 to the clip document.
10314 copyToClip(m_pDoc
, ScRange(0, 0, nTab
, 2, 0, nTab
), &aClipDoc
); // A1:C1
10316 aDestRange
= ScRange(0, 1, nTab
, 2, 1, nTab
);
10317 // Copy A2:C2 to the mix document (for arithmetic paste).
10318 copyToClip(m_pDoc
, aDestRange
, &aMixDoc
); // A2:C2
10320 // Paste A1:C1 to A2:C2 "As Link" and perform addition.
10321 aMark
= ScMarkData(m_pDoc
->GetSheetLimits());
10322 aMark
.SetMarkArea(aDestRange
);
10323 m_pDoc
->CopyFromClip(aDestRange
, aMark
, InsertDeleteFlags::ALL
, nullptr, &aClipDoc
, true, true);
10325 m_pDoc
->MixDocument(aDestRange
, ScPasteFunc::ADD
, false, aMixDoc
);
10327 // Test precondition
10328 CPPUNIT_ASSERT_EQUAL(1001.0, m_pDoc
->GetValue(0, 1, nTab
)); // A2
10329 CPPUNIT_ASSERT_EQUAL(u
"=1000+($Test.$A$1)"_ustr
, m_pDoc
->GetFormula(0, 1, nTab
));
10331 CPPUNIT_ASSERT_EQUAL(1001.0, m_pDoc
->GetValue(1, 1, nTab
)); // B2
10332 CPPUNIT_ASSERT_EQUAL(u
"=1000+($Test.$B$1)"_ustr
, m_pDoc
->GetFormula(1, 1, nTab
));
10334 CPPUNIT_ASSERT_EQUAL(1001.0, m_pDoc
->GetValue(2, 1, nTab
)); // C2
10335 CPPUNIT_ASSERT_EQUAL(u
"=1000+($Test.$C$1)"_ustr
, m_pDoc
->GetFormula(2, 1, nTab
));
10337 // Change A1:C1 from 1.0 to 2.0 (auto calculation is triggered)
10338 m_pDoc
->SetValue(0, 0, nTab
, 2.0); // A1
10339 m_pDoc
->SetValue(1, 0, nTab
, 2.0); // B1
10340 m_pDoc
->SetValue(2, 0, nTab
, 2.0); // C1
10342 // Without the fix in place, this would have failed with
10343 // - Expected: =1002
10344 // - Actual : =1001
10345 CPPUNIT_ASSERT_EQUAL(1002.0, m_pDoc
->GetValue(0, 1, nTab
)); // A2
10346 CPPUNIT_ASSERT_EQUAL(u
"=1000+($Test.$A$1)"_ustr
, m_pDoc
->GetFormula(0, 1, nTab
));
10348 CPPUNIT_ASSERT_EQUAL(1002.0, m_pDoc
->GetValue(1, 1, nTab
)); // B2
10349 CPPUNIT_ASSERT_EQUAL(u
"=1000+($Test.$B$1)"_ustr
, m_pDoc
->GetFormula(1, 1, nTab
));
10351 CPPUNIT_ASSERT_EQUAL(1002.0, m_pDoc
->GetValue(2, 1, nTab
)); // C2
10352 CPPUNIT_ASSERT_EQUAL(u
"=1000+($Test.$C$1)"_ustr
, m_pDoc
->GetFormula(2, 1, nTab
));
10354 // Scenario 3: Like Scenario 2, but transposed
10355 m_pDoc
->InsertTab(nTab
, u
"Test"_ustr
);
10357 m_pDoc
->SetValue(0, 0, nTab
, 1.0); // A1
10358 m_pDoc
->SetValue(1, 0, nTab
, 1000.0); // B1
10359 m_pDoc
->SetValue(0, 1, nTab
, 1.0); // A2
10360 m_pDoc
->SetValue(1, 1, nTab
, 1000.0); // B2
10361 m_pDoc
->SetValue(0, 2, nTab
, 1.0); // A3
10362 m_pDoc
->SetValue(1, 2, nTab
, 1000.0); // B3
10364 // Copy A1:A3 to the clip document.
10365 copyToClip(m_pDoc
, ScRange(0, 0, nTab
, 0, 2, nTab
), &aClipDoc
); // A1:A3
10367 aDestRange
= ScRange(1, 0, nTab
, 1, 2, nTab
);
10368 // Copy B1:B3 to the mix document (for arithmetic paste).
10369 copyToClip(m_pDoc
, aDestRange
, &aMixDoc
); // B1:B3
10371 // Paste A1:A3 to B1:B3 "As Link" and perform addition.
10372 aMark
= ScMarkData(m_pDoc
->GetSheetLimits());
10373 aMark
.SetMarkArea(aDestRange
);
10374 m_pDoc
->CopyFromClip(aDestRange
, aMark
, InsertDeleteFlags::ALL
, nullptr, &aClipDoc
, true, true);
10376 m_pDoc
->MixDocument(aDestRange
, ScPasteFunc::ADD
, false, aMixDoc
);
10378 // Test precondition
10379 CPPUNIT_ASSERT_EQUAL(1001.0, m_pDoc
->GetValue(1, 0, nTab
)); // B1
10380 CPPUNIT_ASSERT_EQUAL(u
"=1000+($Test.$A$1)"_ustr
, m_pDoc
->GetFormula(1, 0, nTab
));
10382 CPPUNIT_ASSERT_EQUAL(1001.0, m_pDoc
->GetValue(1, 1, nTab
)); // B2
10383 CPPUNIT_ASSERT_EQUAL(u
"=1000+($Test.$A$2)"_ustr
, m_pDoc
->GetFormula(1, 1, nTab
));
10385 CPPUNIT_ASSERT_EQUAL(1001.0, m_pDoc
->GetValue(1, 2, nTab
)); // B3
10386 CPPUNIT_ASSERT_EQUAL(u
"=1000+($Test.$A$3)"_ustr
, m_pDoc
->GetFormula(1, 2, nTab
));
10388 // Change A1:C1 from 1.0 to 2.0 (auto calculation is triggered)
10389 m_pDoc
->SetValue(0, 0, nTab
, 2.0); // A1
10390 m_pDoc
->SetValue(0, 1, nTab
, 2.0); // A2
10391 m_pDoc
->SetValue(0, 2, nTab
, 2.0); // A3
10393 // Without the fix in place, this would have failed with
10394 // - Expected: =1002
10395 // - Actual : =1001
10396 CPPUNIT_ASSERT_EQUAL(1002.0, m_pDoc
->GetValue(1, 0, nTab
)); // B1
10397 CPPUNIT_ASSERT_EQUAL(u
"=1000+($Test.$A$1)"_ustr
, m_pDoc
->GetFormula(1, 0, nTab
));
10399 CPPUNIT_ASSERT_EQUAL(1002.0, m_pDoc
->GetValue(1, 1, nTab
)); // B2
10400 CPPUNIT_ASSERT_EQUAL(u
"=1000+($Test.$A$2)"_ustr
, m_pDoc
->GetFormula(1, 1, nTab
));
10402 CPPUNIT_ASSERT_EQUAL(1002.0, m_pDoc
->GetValue(1, 2, nTab
)); // B3
10403 CPPUNIT_ASSERT_EQUAL(u
"=1000+($Test.$A$3)"_ustr
, m_pDoc
->GetFormula(1, 2, nTab
));
10405 m_pDoc
->DeleteTab(nTab
);
10408 CPPUNIT_TEST_FIXTURE(TestCopyPaste
, testMixDataWithFormulaTdf116413
)
10410 sc::AutoCalcSwitch
aACSwitch(*m_pDoc
, true); // turn on auto calculation.
10412 const SCTAB nTab
= 0;
10413 m_pDoc
->InsertTab(nTab
, u
"Test"_ustr
);
10415 // Scenario 1: There is already a reference in destination cell
10416 m_pDoc
->InsertTab(nTab
, u
"Test"_ustr
);
10418 m_pDoc
->SetValue(0, 0, nTab
, 100.0); // A1
10419 m_pDoc
->SetValue(0, 1, nTab
, 1.0); // A2
10420 m_pDoc
->SetString(0, 2, nTab
, u
"=A2"_ustr
); // A3
10422 // Copy A1 to the clip document.
10423 ScDocument
aClipDoc(SCDOCMODE_CLIP
);
10424 copyToClip(m_pDoc
, ScRange(0, 0, nTab
, 0, 0, nTab
), &aClipDoc
); // A1
10426 ScRange
aDestRange(0, 2, nTab
, 0, 2, nTab
);
10427 ScDocument
aMixDoc(SCDOCMODE_CLIP
);
10428 // Copy A3 to the mix document (for arithmetic paste).
10429 copyToClip(m_pDoc
, aDestRange
, &aMixDoc
); // A3
10431 // Paste A1 to A3 and perform addition.
10432 pasteFromClip(m_pDoc
, aDestRange
, &aClipDoc
);
10433 m_pDoc
->MixDocument(aDestRange
, ScPasteFunc::ADD
, false, aMixDoc
);
10435 // Test precondition
10436 CPPUNIT_ASSERT_EQUAL(101.0, m_pDoc
->GetValue(0, 2, nTab
)); // A3
10437 CPPUNIT_ASSERT_EQUAL(u
"=(A2)+100"_ustr
, m_pDoc
->GetFormula(0, 2, nTab
));
10439 // Change A2 from 1.0 to 2.0 (auto calculation is triggered)
10440 m_pDoc
->SetValue(0, 1, nTab
, 2.0); // A2
10442 // Without the fix in place, this would have failed with
10443 // - Expected: =102
10445 CPPUNIT_ASSERT_EQUAL(102.0, m_pDoc
->GetValue(0, 2, nTab
)); // A3
10446 CPPUNIT_ASSERT_EQUAL(u
"=(A2)+100"_ustr
, m_pDoc
->GetFormula(0, 2, nTab
));
10448 // Clear everything and start over.
10449 clearSheet(m_pDoc
, nTab
);
10450 clearSheet(&aClipDoc
, nTab
);
10451 clearSheet(&aMixDoc
, nTab
);
10453 // Scenario 2: Similar to scenario 1, but a range of 4 cells and 2 of them have references
10454 m_pDoc
->InsertTab(nTab
, u
"Test"_ustr
);
10456 m_pDoc
->SetValue(0, 0, nTab
, 100.0); // A1
10457 m_pDoc
->SetValue(0, 1, nTab
, 1.0); // A2
10458 m_pDoc
->SetValue(0, 2, nTab
, 1000.0); // A3
10460 m_pDoc
->SetValue(1, 0, nTab
, 100.0); // B1
10461 m_pDoc
->SetValue(1, 1, nTab
, 1.0); // B2
10462 m_pDoc
->SetString(1, 2, nTab
, u
"=B2"_ustr
); // B3
10464 m_pDoc
->SetValue(2, 0, nTab
, 100.0); // C1
10465 m_pDoc
->SetValue(2, 1, nTab
, 1.0); // C2
10466 m_pDoc
->SetString(2, 2, nTab
, u
"=C2"_ustr
); // C3
10468 m_pDoc
->SetValue(3, 0, nTab
, 100.0); // D1
10469 m_pDoc
->SetValue(3, 1, nTab
, 1.0); // D2
10470 m_pDoc
->SetValue(3, 2, nTab
, 1000.0); // D3
10472 // Copy A1:D1 to the clip document.
10473 copyToClip(m_pDoc
, ScRange(0, 0, nTab
, 3, 0, nTab
), &aClipDoc
); // A1:D1
10475 aDestRange
= ScRange(0, 2, nTab
, 3, 2, nTab
);
10476 // Copy A3:D3 to the mix document (for arithmetic paste).
10477 copyToClip(m_pDoc
, aDestRange
, &aMixDoc
); // A3:D3
10479 // Paste A1:D1 to A3:D3 and perform addition.
10480 pasteFromClip(m_pDoc
, aDestRange
, &aClipDoc
);
10481 m_pDoc
->MixDocument(aDestRange
, ScPasteFunc::ADD
, false, aMixDoc
);
10483 // Test precondition
10484 CPPUNIT_ASSERT_EQUAL(1100.0, m_pDoc
->GetValue(0, 2, nTab
)); // A3
10485 CPPUNIT_ASSERT_EQUAL(OUString(), m_pDoc
->GetFormula(0, 2, nTab
));
10487 CPPUNIT_ASSERT_EQUAL(101.0, m_pDoc
->GetValue(1, 2, nTab
)); // B3
10488 CPPUNIT_ASSERT_EQUAL(u
"=(B2)+100"_ustr
, m_pDoc
->GetFormula(1, 2, nTab
));
10490 CPPUNIT_ASSERT_EQUAL(101.0, m_pDoc
->GetValue(2, 2, nTab
)); // C3
10491 CPPUNIT_ASSERT_EQUAL(u
"=(C2)+100"_ustr
, m_pDoc
->GetFormula(2, 2, nTab
));
10493 CPPUNIT_ASSERT_EQUAL(1100.0, m_pDoc
->GetValue(3, 2, nTab
)); // D3
10494 CPPUNIT_ASSERT_EQUAL(OUString(), m_pDoc
->GetFormula(3, 2, nTab
));
10496 // Change A2:D2 from 1.0 to 2.0 (auto calculation is triggered)
10497 m_pDoc
->SetValue(0, 1, nTab
, 2.0); // A2
10498 m_pDoc
->SetValue(1, 1, nTab
, 2.0); // B2
10499 m_pDoc
->SetValue(2, 1, nTab
, 2.0); // C2
10500 m_pDoc
->SetValue(3, 1, nTab
, 2.0); // D2
10502 CPPUNIT_ASSERT_EQUAL(1100.0, m_pDoc
->GetValue(0, 2, nTab
)); // A3
10503 CPPUNIT_ASSERT_EQUAL(OUString(), m_pDoc
->GetFormula(0, 2, nTab
));
10505 // Without the fix in place, this would have failed with
10506 // - Expected: =102
10508 CPPUNIT_ASSERT_EQUAL(102.0, m_pDoc
->GetValue(1, 2, nTab
)); // B3
10509 CPPUNIT_ASSERT_EQUAL(u
"=(B2)+100"_ustr
, m_pDoc
->GetFormula(1, 2, nTab
));
10511 CPPUNIT_ASSERT_EQUAL(102.0, m_pDoc
->GetValue(2, 2, nTab
)); // C3
10512 CPPUNIT_ASSERT_EQUAL(u
"=(C2)+100"_ustr
, m_pDoc
->GetFormula(2, 2, nTab
));
10514 CPPUNIT_ASSERT_EQUAL(1100.0, m_pDoc
->GetValue(3, 2, nTab
)); // D3
10515 CPPUNIT_ASSERT_EQUAL(OUString(), m_pDoc
->GetFormula(3, 2, nTab
));
10517 // Scenario 3: Similar to scenario 2, but transposed
10518 m_pDoc
->InsertTab(nTab
, u
"Test"_ustr
);
10520 m_pDoc
->SetValue(0, 0, nTab
, 100.0); // A1
10521 m_pDoc
->SetValue(1, 0, nTab
, 1.0); // B1
10522 m_pDoc
->SetValue(2, 0, nTab
, 1000.0); // C1
10524 m_pDoc
->SetValue(0, 1, nTab
, 100.0); // A2
10525 m_pDoc
->SetValue(1, 1, nTab
, 1.0); // B2
10526 m_pDoc
->SetString(2, 1, nTab
, u
"=B2"_ustr
); // C2
10528 m_pDoc
->SetValue(0, 2, nTab
, 100.0); // A3
10529 m_pDoc
->SetValue(1, 2, nTab
, 1.0); // B3
10530 m_pDoc
->SetString(2, 2, nTab
, u
"=B3"_ustr
); // C3
10532 m_pDoc
->SetValue(0, 3, nTab
, 100.0); // A4
10533 m_pDoc
->SetValue(1, 3, nTab
, 1.0); // B4
10534 m_pDoc
->SetValue(2, 3, nTab
, 1000.0); // C4
10536 // Copy A1:A4 to the clip document.
10537 copyToClip(m_pDoc
, ScRange(0, 0, nTab
, 0, 3, nTab
), &aClipDoc
); // A1:A4
10539 aDestRange
= ScRange(2, 0, nTab
, 2, 3, nTab
);
10540 // Copy C1:C4 to the mix document (for arithmetic paste).
10541 copyToClip(m_pDoc
, aDestRange
, &aMixDoc
); // C1:C4
10543 // Paste A1:A4 to C1:C4 and perform addition.
10544 pasteFromClip(m_pDoc
, aDestRange
, &aClipDoc
);
10545 m_pDoc
->MixDocument(aDestRange
, ScPasteFunc::ADD
, false, aMixDoc
);
10547 // Test precondition
10548 CPPUNIT_ASSERT_EQUAL(1100.0, m_pDoc
->GetValue(2, 0, nTab
)); // C1
10549 CPPUNIT_ASSERT_EQUAL(OUString(), m_pDoc
->GetFormula(2, 0, nTab
));
10551 CPPUNIT_ASSERT_EQUAL(101.0, m_pDoc
->GetValue(2, 1, nTab
)); // C2
10552 CPPUNIT_ASSERT_EQUAL(u
"=(B2)+100"_ustr
, m_pDoc
->GetFormula(2, 1, nTab
));
10554 CPPUNIT_ASSERT_EQUAL(101.0, m_pDoc
->GetValue(2, 2, nTab
)); // C3
10555 CPPUNIT_ASSERT_EQUAL(u
"=(B3)+100"_ustr
, m_pDoc
->GetFormula(2, 2, nTab
));
10557 CPPUNIT_ASSERT_EQUAL(1100.0, m_pDoc
->GetValue(2, 3, nTab
)); // C4
10558 CPPUNIT_ASSERT_EQUAL(OUString(), m_pDoc
->GetFormula(2, 3, nTab
));
10560 // Change B1:B4 from 1.0 to 2.0 (auto calculation is triggered)
10561 m_pDoc
->SetValue(1, 0, nTab
, 2.0); // B1
10562 m_pDoc
->SetValue(1, 1, nTab
, 2.0); // B2
10563 m_pDoc
->SetValue(1, 2, nTab
, 2.0); // B3
10564 m_pDoc
->SetValue(1, 3, nTab
, 2.0); // B4
10566 CPPUNIT_ASSERT_EQUAL(1100.0, m_pDoc
->GetValue(2, 0, nTab
)); // C1
10567 CPPUNIT_ASSERT_EQUAL(OUString(), m_pDoc
->GetFormula(2, 0, nTab
));
10569 // Without the fix in place, this would have failed with
10570 // - Expected: =102
10572 CPPUNIT_ASSERT_EQUAL(102.0, m_pDoc
->GetValue(2, 1, nTab
)); // C2
10573 CPPUNIT_ASSERT_EQUAL(u
"=(B2)+100"_ustr
, m_pDoc
->GetFormula(2, 1, nTab
));
10575 CPPUNIT_ASSERT_EQUAL(102.0, m_pDoc
->GetValue(2, 2, nTab
)); // C3
10576 CPPUNIT_ASSERT_EQUAL(u
"=(B3)+100"_ustr
, m_pDoc
->GetFormula(2, 2, nTab
));
10578 CPPUNIT_ASSERT_EQUAL(1100.0, m_pDoc
->GetValue(2, 3, nTab
)); // C4
10579 CPPUNIT_ASSERT_EQUAL(OUString(), m_pDoc
->GetFormula(2, 3, nTab
));
10581 m_pDoc
->DeleteTab(nTab
);
10584 CPPUNIT_TEST_FIXTURE(TestCopyPaste
, testCopyPasteMatrixFormula
)
10587 m_pDoc
->InsertTab(0, u
"hcv"_ustr
);
10589 // Set Values to B1, C1, D1
10590 m_pDoc
->SetValue(ScAddress(1, 0, 0), 2.0); // B1
10591 m_pDoc
->SetValue(ScAddress(2, 0, 0), 5.0); // C1
10592 m_pDoc
->SetValue(ScAddress(3, 0, 0), 3.0); // D1
10594 // Set Values to B2, C2
10595 m_pDoc
->SetString(ScAddress(1, 1, 0), u
"B2"_ustr
); // B2
10596 //m_pDoc->SetString(ScAddress(2,1,0), "C2"); // C2
10597 m_pDoc
->SetString(ScAddress(3, 1, 0), u
"D2"_ustr
); // D2
10599 // Set Values to D3
10600 //m_pDoc->SetValue(ScAddress(1,2,0), 9.0); // B3
10601 //m_pDoc->SetString(ScAddress(2,2,0), "C3"); // C3
10602 m_pDoc
->SetValue(ScAddress(3, 2, 0), 11.0); // D3
10604 // Insert matrix formula to A1
10605 ScMarkData
aMark(m_pDoc
->GetSheetLimits());
10606 aMark
.SelectOneTable(0);
10607 m_pDoc
->InsertMatrixFormula(0, 0, 0, 0, aMark
, u
"=COUNTIF(ISBLANK(B1:D1);TRUE())"_ustr
);
10609 // A1 should contain 0
10610 CPPUNIT_ASSERT_EQUAL(0.0, m_pDoc
->GetValue(ScAddress(0, 0, 0))); // A1
10612 // Copy cell A1 to clipboard.
10613 ScAddress
aPos(0, 0, 0); // A1
10614 ScDocument
aClipDoc(SCDOCMODE_CLIP
);
10615 ScClipParam
aParam(aPos
, false);
10616 m_pDoc
->CopyToClip(aParam
, &aClipDoc
, &aMark
, false, false);
10617 // Formula string should be equal.
10618 CPPUNIT_ASSERT_EQUAL(m_pDoc
->GetString(aPos
), aClipDoc
.GetString(aPos
));
10620 // First try single range.
10621 // Paste matrix formula to A2
10622 pasteFromClip(m_pDoc
, ScRange(0, 1, 0, 0, 1, 0), &aClipDoc
); // A2
10623 // A2 Cell value should contain 1.0
10624 CPPUNIT_ASSERT_EQUAL(1.0, m_pDoc
->GetValue(ScAddress(0, 1, 0)));
10626 // Paste matrix formula to A3
10627 pasteFromClip(m_pDoc
, ScRange(0, 2, 0, 0, 2, 0), &aClipDoc
); // A3
10628 // A3 Cell value should contain 2.0
10629 CPPUNIT_ASSERT_EQUAL(2.0, m_pDoc
->GetValue(ScAddress(0, 2, 0)));
10631 // Paste matrix formula to A4
10632 pasteFromClip(m_pDoc
, ScRange(0, 3, 0, 0, 3, 0), &aClipDoc
); // A4
10633 // A4 Cell value should contain 3.0
10634 CPPUNIT_ASSERT_EQUAL(3.0, m_pDoc
->GetValue(ScAddress(0, 3, 0)));
10636 // Clear cell A2:A4
10637 clearRange(m_pDoc
, ScRange(0, 1, 0, 0, 3, 0));
10639 // Paste matrix formula to range A2:A4
10640 pasteFromClip(m_pDoc
, ScRange(0, 1, 0, 0, 3, 0), &aClipDoc
); // A2:A4
10642 // A2 Cell value should contain 1.0
10643 CPPUNIT_ASSERT_EQUAL(1.0, m_pDoc
->GetValue(ScAddress(0, 1, 0)));
10644 // A3 Cell value should contain 2.0
10645 CPPUNIT_ASSERT_EQUAL(2.0, m_pDoc
->GetValue(ScAddress(0, 2, 0)));
10646 // A4 Cell value should contain 3.0
10647 CPPUNIT_ASSERT_EQUAL(3.0, m_pDoc
->GetValue(ScAddress(0, 3, 0)));
10649 m_pDoc
->DeleteTab(0);
10652 CPPUNIT_TEST_FIXTURE(TestCopyPaste
, testUndoBackgroundColor
)
10654 m_pDoc
->InsertTab(0, u
"Table1"_ustr
);
10656 ScDocument
aClipDoc(SCDOCMODE_CLIP
);
10657 ScMarkData
aMark(m_pDoc
->GetSheetLimits());
10659 // Set Values to B1, C2, D5
10660 m_pDoc
->SetValue(ScAddress(1, 0, 0), 1.0); // B1
10661 m_pDoc
->SetValue(ScAddress(2, 1, 0), 2.0); // C2
10662 m_pDoc
->SetValue(ScAddress(3, 4, 0), 3.0); // D5
10665 ScPatternAttr
aCellBlueColor(m_pDoc
->getCellAttributeHelper());
10666 aCellBlueColor
.GetItemSet().Put(SvxBrushItem(COL_BLUE
, ATTR_BACKGROUND
));
10667 m_pDoc
->ApplyPatternAreaTab(0, 3, m_pDoc
->MaxCol(), 3, 0, aCellBlueColor
);
10669 // Insert a new row at row 3
10670 ScRange
aRowOne(0, 2, 0, m_pDoc
->MaxCol(), 2, 0);
10671 aMark
.SetMarkArea(aRowOne
);
10672 ScDocFunc
& rFunc
= m_xDocShell
->GetDocFunc();
10673 rFunc
.InsertCells(aRowOne
, &aMark
, INS_INSROWS_BEFORE
, true, true);
10676 const SfxPoolItem
* pItem
= nullptr;
10677 m_pDoc
->GetPattern(ScAddress(1000, 4, 0))->GetItemSet().HasItem(ATTR_BACKGROUND
, &pItem
);
10678 CPPUNIT_ASSERT(pItem
);
10679 CPPUNIT_ASSERT_EQUAL(COL_BLUE
, static_cast<const SvxBrushItem
*>(pItem
)->GetColor());
10681 // Undo the new row
10682 m_pDoc
->GetUndoManager()->Undo();
10685 // Failed if row 3 is not blue all the way through
10687 m_pDoc
->GetPattern(ScAddress(1000, 3, 0))->GetItemSet().HasItem(ATTR_BACKGROUND
, &pItem
);
10688 CPPUNIT_ASSERT(pItem
);
10689 CPPUNIT_ASSERT_EQUAL(COL_BLUE
, static_cast<const SvxBrushItem
*>(pItem
)->GetColor());
10691 m_pDoc
->DeleteTab(0);
10694 CPPUNIT_TEST_FIXTURE(TestCopyPaste
, testMergedHyperlink
)
10696 m_pDoc
->InsertTab(0, u
"Table1"_ustr
);
10697 m_pDoc
->InitDrawLayer(m_xDocShell
.get());
10699 ScFieldEditEngine
& pEE
= m_pDoc
->GetEditEngine();
10700 pEE
.SetTextCurrentDefaults(u
"https://libreoffice.org/"_ustr
);
10701 m_pDoc
->SetEditText(ScAddress(1, 0, 0), pEE
.CreateTextObject()); // B1
10703 m_pDoc
->DoMergeContents(0, 0, 1, 0, 0); // A1:B1
10705 CPPUNIT_ASSERT_EQUAL(CELLTYPE_EDIT
, m_pDoc
->GetCellType(ScAddress(0, 0, 0))); // A1
10706 const EditTextObject
* pEditObj
= m_pDoc
->GetEditText(ScAddress(0, 0, 0)); // A1
10707 CPPUNIT_ASSERT(pEditObj
);
10708 CPPUNIT_ASSERT_EQUAL(u
"https://libreoffice.org/"_ustr
, pEditObj
->GetText(0));
10711 CPPUNIT_PLUGIN_IMPLEMENT();
10713 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */