2473 lines
87 KiB
C++
2473 lines
87 KiB
C++
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
|
/*
|
|
* This file is part of the LibreOffice project.
|
|
*
|
|
* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
*/
|
|
|
|
#include "../helper/qahelper.hxx"
|
|
#include <LibreOfficeKit/LibreOfficeKitEnums.h>
|
|
#include <unotools/syslocaleoptions.hxx>
|
|
#include <vcl/keycodes.hxx>
|
|
#include <vcl/scheduler.hxx>
|
|
|
|
#include <comphelper/processfactory.hxx>
|
|
#include <comphelper/propertysequence.hxx>
|
|
#include <comphelper/scopeguard.hxx>
|
|
#include <comphelper/servicehelper.hxx>
|
|
#include <com/sun/star/awt/Key.hpp>
|
|
#include <com/sun/star/sheet/GlobalSheetSettings.hpp>
|
|
#include <condformathelper.hxx>
|
|
#include <conditio.hxx>
|
|
#include <document.hxx>
|
|
#include <docsh.hxx>
|
|
#include <dpobject.hxx>
|
|
#include <formulaopt.hxx>
|
|
#include <inputopt.hxx>
|
|
#include <postit.hxx>
|
|
#include <rangeutl.hxx>
|
|
#include <scmod.hxx>
|
|
#include <tabvwsh.hxx>
|
|
#include <viewdata.hxx>
|
|
|
|
using namespace ::com::sun::star;
|
|
|
|
class ScUiCalcTest : public ScModelTestBase
|
|
{
|
|
public:
|
|
ScUiCalcTest();
|
|
};
|
|
|
|
ScUiCalcTest::ScUiCalcTest()
|
|
: ScModelTestBase(u"sc/qa/unit/uicalc/data"_ustr)
|
|
{
|
|
}
|
|
|
|
static void lcl_AssertConditionalFormatList(ScDocument& rDoc, size_t nSize,
|
|
std::unordered_map<OUString, OUString>& rExpectedValues)
|
|
{
|
|
ScConditionalFormatList* pList = rDoc.GetCondFormList(0);
|
|
CPPUNIT_ASSERT_EQUAL(nSize, pList->size());
|
|
|
|
OUString sRangeStr;
|
|
for (const auto& rItem : *pList)
|
|
{
|
|
const ScRangeList& aRange = rItem->GetRange();
|
|
aRange.Format(sRangeStr, ScRefFlags::VALID, rDoc, rDoc.GetAddressConvention());
|
|
CPPUNIT_ASSERT_MESSAGE(OString(sRangeStr.toUtf8() + " not found").getStr(),
|
|
rExpectedValues.count(sRangeStr));
|
|
CPPUNIT_ASSERT_EQUAL(rExpectedValues[sRangeStr],
|
|
ScCondFormatHelper::GetExpression(*rItem, aRange.GetTopLeftCorner()));
|
|
}
|
|
}
|
|
|
|
static void lcl_AssertCurrentCursorPosition(ScDocShell& rDocSh, std::u16string_view rStr)
|
|
{
|
|
ScAddress aAddr;
|
|
sal_Int32 nOffset = 0;
|
|
ScRangeStringConverter::GetAddressFromString(aAddr, rStr, rDocSh.GetDocument(),
|
|
formula::FormulaGrammar::CONV_OOO, nOffset);
|
|
ScTabViewShell* pViewShell = rDocSh.GetBestViewShell(false);
|
|
CPPUNIT_ASSERT_EQUAL_MESSAGE(
|
|
OUString(OUString::Concat("Incorrect Column in position ") + rStr).toUtf8().getStr(),
|
|
aAddr.Col(), pViewShell->GetViewData().GetCurX());
|
|
CPPUNIT_ASSERT_EQUAL_MESSAGE(
|
|
OUString(OUString::Concat("Incorrect Row in position ") + rStr).toUtf8().getStr(),
|
|
aAddr.Row(), pViewShell->GetViewData().GetCurY());
|
|
}
|
|
|
|
CPPUNIT_TEST_FIXTURE(ScUiCalcTest, testTdf142854_GridVisibilityImportXlsxInHeadlessMode)
|
|
{
|
|
// Tests are running in Headless mode
|
|
// Import an ods file with 'Hide' global grid visibility setting.
|
|
createScDoc("tdf126541_GridOffGlobally.ods");
|
|
ScDocument* pDoc = getScDoc();
|
|
CPPUNIT_ASSERT(!pDoc->GetViewOptions().GetOption(VOPT_GRID));
|
|
|
|
// To avoid regression, in headless mode leave the bug tdf126541
|
|
// It means Sheet based grid line visibility setting will overwrite the global setting.
|
|
// If there is only 1 sheet in the document, it will not result visible problems.
|
|
createScDoc("tdf126541_GridOff.xlsx");
|
|
pDoc = getScDoc();
|
|
CPPUNIT_ASSERT(!pDoc->GetViewOptions().GetOption(VOPT_GRID));
|
|
}
|
|
|
|
CPPUNIT_TEST_FIXTURE(ScUiCalcTest, testExternalReferences)
|
|
{
|
|
createScDoc();
|
|
ScDocument* pDoc = getScDoc();
|
|
|
|
insertStringToCell(u"A1"_ustr, u"2015");
|
|
insertStringToCell(u"A2"_ustr, u"2015");
|
|
insertStringToCell(u"A3"_ustr, u"2015");
|
|
|
|
insertStringToCell(u"B1"_ustr, u"1");
|
|
insertStringToCell(u"B2"_ustr, u"1");
|
|
insertStringToCell(u"B3"_ustr, u"2");
|
|
|
|
insertStringToCell(u"C1"_ustr, u"10");
|
|
insertStringToCell(u"C2"_ustr, u"20");
|
|
insertStringToCell(u"C3"_ustr, u"5");
|
|
|
|
insertStringToCell(u"D1"_ustr, u"BIG FISH");
|
|
insertStringToCell(u"D2"_ustr, u"FISHFISH");
|
|
insertStringToCell(u"D3"_ustr, u"FISHY");
|
|
|
|
// Save the document
|
|
save(u"calc8"_ustr);
|
|
|
|
// Open a new document
|
|
createScDoc();
|
|
pDoc = getScDoc();
|
|
|
|
// Insert the references to the external document
|
|
{
|
|
// tdf#115162
|
|
OUString aFormula = "=SUMIFS('" + maTempFile.GetURL() + "'#$Sheet1.C1:C3,'"
|
|
+ maTempFile.GetURL() + "'#$Sheet1.B1:B3,1,'" + maTempFile.GetURL()
|
|
+ "'#$Sheet1.A1:A3,2015)";
|
|
insertStringToCell(u"A1"_ustr, aFormula);
|
|
|
|
// tdf#115162: Without the fix in place, this test would have failed with
|
|
// - Expected: 30
|
|
// - Actual : Err:504
|
|
CPPUNIT_ASSERT_EQUAL(u"30"_ustr, pDoc->GetString(ScAddress(0, 0, 0)));
|
|
}
|
|
|
|
{
|
|
// tdf#114820
|
|
OUString aFormula = "=VLOOKUP('" + maTempFile.GetURL() + "'#$Sheet1.A1;'"
|
|
+ maTempFile.GetURL() + "'#$Sheet1.A1:B3,2,0)";
|
|
insertStringToCell(u"A1"_ustr, aFormula);
|
|
|
|
// Without the fix in place, this test would have failed with
|
|
// - Expected: 1
|
|
// - Actual : Err:504
|
|
CPPUNIT_ASSERT_EQUAL(u"1"_ustr, pDoc->GetString(ScAddress(0, 0, 0)));
|
|
}
|
|
|
|
{
|
|
// tdf#116149
|
|
OUString aFormula = "=VAR('" + maTempFile.GetURL() + "'#$Sheet1.C1;'" + maTempFile.GetURL()
|
|
+ "'#$Sheet1.C2)";
|
|
insertStringToCell(u"A1"_ustr, aFormula);
|
|
|
|
// Without the fix in place, this test would have failed with
|
|
// - Expected: 50
|
|
// - Actual : Err:504
|
|
CPPUNIT_ASSERT_EQUAL(u"50"_ustr, pDoc->GetString(ScAddress(0, 0, 0)));
|
|
}
|
|
|
|
{
|
|
// tdf#100847
|
|
// Use an empty cell
|
|
OUString aFormula = "=+'" + maTempFile.GetURL() + "'#$Sheet1.A1000";
|
|
insertStringToCell(u"A1"_ustr, aFormula);
|
|
|
|
aFormula = "=+'" + maTempFile.GetURL() + "'#$Sheet1.A1000*1";
|
|
insertStringToCell(u"B1"_ustr, aFormula);
|
|
|
|
aFormula = "=+N('" + maTempFile.GetURL() + "'#$Sheet1.A1000)*1";
|
|
insertStringToCell(u"C1"_ustr, aFormula);
|
|
|
|
CPPUNIT_ASSERT_EQUAL(u"0"_ustr, pDoc->GetString(ScAddress(0, 0, 0)));
|
|
|
|
// Without the fix in place, this test would have failed with
|
|
// - Expected: 0
|
|
// - Actual : #VALUE!
|
|
CPPUNIT_ASSERT_EQUAL(u"0"_ustr, pDoc->GetString(ScAddress(1, 0, 0)));
|
|
CPPUNIT_ASSERT_EQUAL(u"0"_ustr, pDoc->GetString(ScAddress(2, 0, 0)));
|
|
}
|
|
|
|
{
|
|
//tdf#36387
|
|
OUString aAndFormula = "=AND('" + maTempFile.GetURL() + "'#$Sheet1.A1:C1)";
|
|
insertStringToCell(u"A1"_ustr, aAndFormula);
|
|
|
|
OUString aOrFormula = "=OR('" + maTempFile.GetURL() + "'#$Sheet1.A1:C1)";
|
|
insertStringToCell(u"B1"_ustr, aOrFormula);
|
|
|
|
// Without the fix in place, this test would have failed with
|
|
// - Expected: TRUE
|
|
// - Actual : Err:504
|
|
CPPUNIT_ASSERT_EQUAL(u"TRUE"_ustr, pDoc->GetString(ScAddress(0, 0, 0)));
|
|
CPPUNIT_ASSERT_EQUAL(u"TRUE"_ustr, pDoc->GetString(ScAddress(1, 0, 0)));
|
|
}
|
|
|
|
{
|
|
//tdf#113898
|
|
OUString aAndFormula = "=SUMPRODUCT(NOT(ISERROR(FIND(\"FISH\";'" + maTempFile.GetURL()
|
|
+ "'#$Sheet1.D1:D3))))";
|
|
insertStringToCell(u"A1"_ustr, aAndFormula);
|
|
|
|
// Without the fix in place, this test would have failed with
|
|
// - Expected: 3
|
|
// - Actual : 1
|
|
CPPUNIT_ASSERT_EQUAL(3.0, pDoc->GetValue(ScAddress(0, 0, 0)));
|
|
}
|
|
}
|
|
|
|
#if !defined(MACOSX) && !defined(_WIN32) //FIXME
|
|
CPPUNIT_TEST_FIXTURE(ScUiCalcTest, testTdf151886)
|
|
{
|
|
createScDoc();
|
|
ScDocument* pDoc = getScDoc();
|
|
|
|
// Set the system locale to German
|
|
SvtSysLocaleOptions aOptions;
|
|
OUString sLocaleConfigString = aOptions.GetLanguageTag().getBcp47();
|
|
aOptions.SetLocaleConfigString(u"de-DE"_ustr);
|
|
aOptions.Commit();
|
|
comphelper::ScopeGuard g([&aOptions, &sLocaleConfigString] {
|
|
aOptions.SetLocaleConfigString(sLocaleConfigString);
|
|
aOptions.Commit();
|
|
});
|
|
|
|
insertStringToCell(u"A1"_ustr, u"=1,1");
|
|
|
|
insertStringToCell(u"A2"_ustr, u"=1.1");
|
|
|
|
CPPUNIT_ASSERT_EQUAL(u"1,1"_ustr, pDoc->GetString(0, 0, 0));
|
|
CPPUNIT_ASSERT_EQUAL(u"#NAME?"_ustr, pDoc->GetString(0, 1, 0));
|
|
|
|
// change UseEnglishFuncName to true
|
|
ScDocShell* pDocSh = getScDocShell();
|
|
ScFormulaOptions aFormulaOptions = ScModule::get()->GetFormulaOptions();
|
|
bool bOldStatus = aFormulaOptions.GetUseEnglishFuncName();
|
|
aFormulaOptions.SetUseEnglishFuncName(true);
|
|
pDocSh->SetFormulaOptions(aFormulaOptions);
|
|
|
|
insertStringToCell(u"A1"_ustr, u"=1,1");
|
|
|
|
insertStringToCell(u"A2"_ustr, u"=1.1");
|
|
|
|
// Without the fix in place, this test would have failed with
|
|
// - Expected: 1,1
|
|
// - Actual : #NAME?
|
|
CPPUNIT_ASSERT_EQUAL(u"1,1"_ustr, pDoc->GetString(0, 0, 0));
|
|
CPPUNIT_ASSERT_EQUAL(u"#NAME?"_ustr, pDoc->GetString(0, 1, 0));
|
|
|
|
aFormulaOptions.SetUseEnglishFuncName(bOldStatus);
|
|
pDocSh->SetFormulaOptions(aFormulaOptions);
|
|
}
|
|
#endif
|
|
|
|
CPPUNIT_TEST_FIXTURE(ScUiCalcTest, testTdf162087)
|
|
{
|
|
auto verify = [this]() {
|
|
ScDocument* pDoc = getScDoc();
|
|
insertArrayToCell(u"E5"_ustr, u"=myData[[#Data]]");
|
|
|
|
CPPUNIT_ASSERT_EQUAL(u"Elisabeth"_ustr, pDoc->GetString(4, 4, 0));
|
|
CPPUNIT_ASSERT_EQUAL(u"Frieda"_ustr, pDoc->GetString(4, 5, 0));
|
|
CPPUNIT_ASSERT_EQUAL(u"Adele"_ustr, pDoc->GetString(4, 6, 0));
|
|
CPPUNIT_ASSERT_EQUAL(u"Berta"_ustr, pDoc->GetString(4, 7, 0));
|
|
CPPUNIT_ASSERT_EQUAL(u"total"_ustr, pDoc->GetString(4, 8, 0));
|
|
CPPUNIT_ASSERT_EQUAL(u"7"_ustr, pDoc->GetString(5, 4, 0));
|
|
CPPUNIT_ASSERT_EQUAL(u"6"_ustr, pDoc->GetString(5, 5, 0));
|
|
CPPUNIT_ASSERT_EQUAL(u"4"_ustr, pDoc->GetString(5, 6, 0));
|
|
CPPUNIT_ASSERT_EQUAL(u"5"_ustr, pDoc->GetString(5, 7, 0));
|
|
CPPUNIT_ASSERT_EQUAL(u"22"_ustr, pDoc->GetString(5, 8, 0));
|
|
|
|
insertArrayToCell(u"H5"_ustr, u"=myData[[#Headers]]");
|
|
|
|
CPPUNIT_ASSERT_EQUAL(u"Name"_ustr, pDoc->GetString(7, 4, 0));
|
|
CPPUNIT_ASSERT_EQUAL(u"Count"_ustr, pDoc->GetString(8, 4, 0));
|
|
|
|
insertArrayToCell(u"K5"_ustr, u"=myData[[#All]]");
|
|
|
|
CPPUNIT_ASSERT_EQUAL(u"Name"_ustr, pDoc->GetString(10, 4, 0));
|
|
CPPUNIT_ASSERT_EQUAL(u"Elisabeth"_ustr, pDoc->GetString(10, 5, 0));
|
|
CPPUNIT_ASSERT_EQUAL(u"Frieda"_ustr, pDoc->GetString(10, 6, 0));
|
|
CPPUNIT_ASSERT_EQUAL(u"Adele"_ustr, pDoc->GetString(10, 7, 0));
|
|
CPPUNIT_ASSERT_EQUAL(u"Berta"_ustr, pDoc->GetString(10, 8, 0));
|
|
CPPUNIT_ASSERT_EQUAL(u"total"_ustr, pDoc->GetString(10, 9, 0));
|
|
CPPUNIT_ASSERT_EQUAL(u"Count"_ustr, pDoc->GetString(11, 4, 0));
|
|
CPPUNIT_ASSERT_EQUAL(u"7"_ustr, pDoc->GetString(11, 5, 0));
|
|
CPPUNIT_ASSERT_EQUAL(u"6"_ustr, pDoc->GetString(11, 6, 0));
|
|
CPPUNIT_ASSERT_EQUAL(u"4"_ustr, pDoc->GetString(11, 7, 0));
|
|
CPPUNIT_ASSERT_EQUAL(u"5"_ustr, pDoc->GetString(11, 8, 0));
|
|
CPPUNIT_ASSERT_EQUAL(u"22"_ustr, pDoc->GetString(11, 9, 0));
|
|
};
|
|
|
|
createScDoc("tdf162087.ods");
|
|
verify();
|
|
|
|
// change UseEnglishFuncName to true
|
|
ScDocShell* pDocSh = getScDocShell();
|
|
ScFormulaOptions aFormulaOptions = ScModule::get()->GetFormulaOptions();
|
|
bool bOldStatus = aFormulaOptions.GetUseEnglishFuncName();
|
|
aFormulaOptions.SetUseEnglishFuncName(true);
|
|
pDocSh->SetFormulaOptions(aFormulaOptions);
|
|
|
|
createScDoc("tdf162087.ods");
|
|
pDocSh = getScDocShell();
|
|
|
|
// Without the fix in place, this test would have failed with
|
|
// - Expected: Elisabeth
|
|
// - Actual : #NAME?
|
|
verify();
|
|
|
|
aFormulaOptions.SetUseEnglishFuncName(bOldStatus);
|
|
pDocSh->SetFormulaOptions(aFormulaOptions);
|
|
}
|
|
|
|
CPPUNIT_TEST_FIXTURE(ScUiCalcTest, testTdf103994)
|
|
{
|
|
createScDoc();
|
|
ScDocument* pDoc = getScDoc();
|
|
|
|
insertStringToCell(u"A1"_ustr, u"1");
|
|
insertStringToCell(u"B1"_ustr, u"2");
|
|
|
|
// Save the document
|
|
save(u"calc8"_ustr);
|
|
|
|
// Open a new document
|
|
createScDoc();
|
|
pDoc = getScDoc();
|
|
|
|
// Insert the reference to the external document
|
|
OUString aFormula = "='" + maTempFile.GetURL() + "'#$Sheet1.A1";
|
|
insertStringToCell(u"A1"_ustr, aFormula);
|
|
|
|
CPPUNIT_ASSERT_EQUAL(aFormula, pDoc->GetFormula(0, 0, 0));
|
|
CPPUNIT_ASSERT_EQUAL(1.0, pDoc->GetValue(ScAddress(0, 0, 0)));
|
|
|
|
goToCell(u"A1"_ustr);
|
|
|
|
dispatchCommand(mxComponent, u".uno:Cut"_ustr, {});
|
|
|
|
goToCell(u"B1"_ustr);
|
|
|
|
dispatchCommand(mxComponent, u".uno:Paste"_ustr, {});
|
|
|
|
// Without the fix in place, this test would have failed with
|
|
// - Expected: ='file:///tmp/lu124171irlmb.tmp'#$Sheet1.A1
|
|
// - Actual : ='file:///tmp/lu124171irlmb.tmp'#$Sheet1.B1
|
|
CPPUNIT_ASSERT_EQUAL(aFormula, pDoc->GetFormula(1, 0, 0));
|
|
CPPUNIT_ASSERT_EQUAL(1.0, pDoc->GetValue(ScAddress(1, 0, 0)));
|
|
}
|
|
|
|
CPPUNIT_TEST_FIXTURE(ScUiCalcTest, testTdf113541)
|
|
{
|
|
createScDoc();
|
|
ScDocument* pDoc = getScDoc();
|
|
|
|
insertStringToCell(u"A1"_ustr, u"50");
|
|
|
|
// Save the document
|
|
save(u"calc8"_ustr);
|
|
|
|
// Open a new document
|
|
createScDoc();
|
|
pDoc = getScDoc();
|
|
|
|
// Change grammar to Excel A1
|
|
FormulaGrammarSwitch aFGSwitch(pDoc, formula::FormulaGrammar::GRAM_ENGLISH_XL_A1);
|
|
|
|
// Insert the reference to the external document
|
|
OUString aFormula = "=['" + maTempFile.GetURL() + "']Sheet1!A1";
|
|
insertStringToCell(u"A1"_ustr, aFormula);
|
|
|
|
// Without the fix in place, this test would have failed with
|
|
// - Expected: 50
|
|
// - Actual : Err:507
|
|
CPPUNIT_ASSERT_EQUAL(u"50"_ustr, pDoc->GetString(ScAddress(0, 0, 0)));
|
|
}
|
|
|
|
CPPUNIT_TEST_FIXTURE(ScUiCalcTest, testTdf126577)
|
|
{
|
|
createScDoc();
|
|
ScDocument* pDoc = getScDoc();
|
|
|
|
goToCell(u"A1:A20"_ustr);
|
|
|
|
uno::Sequence<beans::PropertyValue> aArgs(
|
|
comphelper::InitPropertySequence({ { "FillDir", uno::Any(u"B"_ustr) },
|
|
{ "FillCmd", uno::Any(u"L"_ustr) },
|
|
{ "FillStep", uno::Any(u"1"_ustr) },
|
|
{ "FillDateCmd", uno::Any(u"D"_ustr) },
|
|
{ "FillStart", uno::Any(u"1"_ustr) },
|
|
{ "FillMax", uno::Any(u"10"_ustr) } }));
|
|
dispatchCommand(mxComponent, u".uno:FillSeries"_ustr, aArgs);
|
|
|
|
for (size_t i = 0; i < 10; ++i)
|
|
{
|
|
CPPUNIT_ASSERT_EQUAL(OUString(OUString::number(i + 1)),
|
|
pDoc->GetString(ScAddress(0, i, 0)));
|
|
}
|
|
|
|
for (size_t i = 10; i < 20; ++i)
|
|
{
|
|
// Without the fix in place, this test would have failed with
|
|
// - Expected:
|
|
// - Actual : #NUM!
|
|
CPPUNIT_ASSERT_EQUAL(u""_ustr, pDoc->GetString(ScAddress(0, i, 0)));
|
|
}
|
|
}
|
|
|
|
CPPUNIT_TEST_FIXTURE(ScUiCalcTest, testTdf107869)
|
|
{
|
|
// Without the fix in place, this test would have crashed
|
|
createScDoc();
|
|
ScDocument* pDoc = getScDoc();
|
|
|
|
insertStringToCell(u"A1"_ustr, u"A");
|
|
insertStringToCell(u"A2"_ustr, u"B");
|
|
|
|
// Add a new comment to A1 and A2
|
|
uno::Sequence<beans::PropertyValue> aArgs
|
|
= comphelper::InitPropertySequence({ { "Text", uno::Any(u"Comment"_ustr) } });
|
|
|
|
goToCell(u"A1"_ustr);
|
|
dispatchCommand(mxComponent, u".uno:InsertAnnotation"_ustr, aArgs);
|
|
|
|
goToCell(u"A2"_ustr);
|
|
dispatchCommand(mxComponent, u".uno:InsertAnnotation"_ustr, aArgs);
|
|
|
|
CPPUNIT_ASSERT_MESSAGE("There should be a note on A1", pDoc->HasNote(ScAddress(0, 0, 0)));
|
|
CPPUNIT_ASSERT_MESSAGE("There should be a note on A2", pDoc->HasNote(ScAddress(0, 1, 0)));
|
|
|
|
goToCell(u"A1"_ustr);
|
|
|
|
dispatchCommand(mxComponent, u".uno:SelectRow"_ustr, {});
|
|
|
|
dispatchCommand(mxComponent, u".uno:DeleteRows"_ustr, {});
|
|
|
|
for (size_t i = 0; i < 10; ++i)
|
|
{
|
|
CPPUNIT_ASSERT_EQUAL(u"B"_ustr, pDoc->GetString(ScAddress(0, 0, 0)));
|
|
CPPUNIT_ASSERT_MESSAGE("There should be a note on A1", pDoc->HasNote(ScAddress(0, 0, 0)));
|
|
CPPUNIT_ASSERT_MESSAGE("There should be no note on A2", !pDoc->HasNote(ScAddress(0, 1, 0)));
|
|
|
|
dispatchCommand(mxComponent, u".uno:Undo"_ustr, {});
|
|
|
|
CPPUNIT_ASSERT_EQUAL(u"A"_ustr, pDoc->GetString(ScAddress(0, 0, 0)));
|
|
CPPUNIT_ASSERT_EQUAL(u"B"_ustr, pDoc->GetString(ScAddress(0, 1, 0)));
|
|
CPPUNIT_ASSERT_MESSAGE("There should be a note on A1", pDoc->HasNote(ScAddress(0, 0, 0)));
|
|
CPPUNIT_ASSERT_MESSAGE("There should be a note on A2", pDoc->HasNote(ScAddress(0, 1, 0)));
|
|
|
|
dispatchCommand(mxComponent, u".uno:Redo"_ustr, {});
|
|
}
|
|
|
|
dispatchCommand(mxComponent, u".uno:Undo"_ustr, {});
|
|
|
|
goToCell(u"A1:A2"_ustr);
|
|
|
|
dispatchCommand(mxComponent, u".uno:SelectRow"_ustr, {});
|
|
|
|
dispatchCommand(mxComponent, u".uno:DeleteRows"_ustr, {});
|
|
|
|
for (size_t i = 0; i < 10; ++i)
|
|
{
|
|
CPPUNIT_ASSERT_EQUAL(u""_ustr, pDoc->GetString(ScAddress(0, 0, 0)));
|
|
CPPUNIT_ASSERT_EQUAL(u""_ustr, pDoc->GetString(ScAddress(0, 1, 0)));
|
|
CPPUNIT_ASSERT_MESSAGE("There should be no note on A1", !pDoc->HasNote(ScAddress(0, 0, 0)));
|
|
CPPUNIT_ASSERT_MESSAGE("There should be no note on A2", !pDoc->HasNote(ScAddress(0, 1, 0)));
|
|
|
|
dispatchCommand(mxComponent, u".uno:Undo"_ustr, {});
|
|
|
|
CPPUNIT_ASSERT_EQUAL(u"A"_ustr, pDoc->GetString(ScAddress(0, 0, 0)));
|
|
CPPUNIT_ASSERT_EQUAL(u"B"_ustr, pDoc->GetString(ScAddress(0, 1, 0)));
|
|
CPPUNIT_ASSERT_MESSAGE("There should be a note on A1", pDoc->HasNote(ScAddress(0, 0, 0)));
|
|
CPPUNIT_ASSERT_MESSAGE("There should be a note on A2", pDoc->HasNote(ScAddress(0, 1, 0)));
|
|
|
|
dispatchCommand(mxComponent, u".uno:Redo"_ustr, {});
|
|
}
|
|
}
|
|
|
|
CPPUNIT_TEST_FIXTURE(ScUiCalcTest, testTdf63805)
|
|
{
|
|
createScDoc();
|
|
ScDocument* pDoc = getScDoc();
|
|
|
|
insertStringToCell(u"A1"_ustr, u"2012-10-31");
|
|
|
|
goToCell(u"A1:A20"_ustr);
|
|
|
|
uno::Sequence<beans::PropertyValue> aArgs(
|
|
comphelper::InitPropertySequence({ { "FillDir", uno::Any(u"B"_ustr) },
|
|
{ "FillCmd", uno::Any(u"D"_ustr) },
|
|
{ "FillStep", uno::Any(u"1"_ustr) },
|
|
{ "FillDateCmd", uno::Any(u"M"_ustr) },
|
|
{ "FillStart", uno::Any(u"41213"_ustr) } }));
|
|
dispatchCommand(mxComponent, u".uno:FillSeries"_ustr, aArgs);
|
|
|
|
CPPUNIT_ASSERT_EQUAL(u"2012-10-31"_ustr, pDoc->GetString(ScAddress(0, 0, 0)));
|
|
|
|
// Without the fix in place, this test would have failed with
|
|
// - Expected: 2012-11-30
|
|
// - Actual : 2012-12-01
|
|
CPPUNIT_ASSERT_EQUAL(u"2012-11-30"_ustr, pDoc->GetString(ScAddress(0, 1, 0)));
|
|
CPPUNIT_ASSERT_EQUAL(u"2012-12-31"_ustr, pDoc->GetString(ScAddress(0, 2, 0)));
|
|
CPPUNIT_ASSERT_EQUAL(u"2013-01-31"_ustr, pDoc->GetString(ScAddress(0, 3, 0)));
|
|
CPPUNIT_ASSERT_EQUAL(u"2013-02-28"_ustr, pDoc->GetString(ScAddress(0, 4, 0)));
|
|
CPPUNIT_ASSERT_EQUAL(u"2013-03-31"_ustr, pDoc->GetString(ScAddress(0, 5, 0)));
|
|
CPPUNIT_ASSERT_EQUAL(u"2013-04-30"_ustr, pDoc->GetString(ScAddress(0, 6, 0)));
|
|
CPPUNIT_ASSERT_EQUAL(u"2013-05-31"_ustr, pDoc->GetString(ScAddress(0, 7, 0)));
|
|
CPPUNIT_ASSERT_EQUAL(u"2013-06-30"_ustr, pDoc->GetString(ScAddress(0, 8, 0)));
|
|
CPPUNIT_ASSERT_EQUAL(u"2013-07-31"_ustr, pDoc->GetString(ScAddress(0, 9, 0)));
|
|
CPPUNIT_ASSERT_EQUAL(u"2013-08-31"_ustr, pDoc->GetString(ScAddress(0, 10, 0)));
|
|
CPPUNIT_ASSERT_EQUAL(u"2013-09-30"_ustr, pDoc->GetString(ScAddress(0, 11, 0)));
|
|
CPPUNIT_ASSERT_EQUAL(u"2013-10-31"_ustr, pDoc->GetString(ScAddress(0, 12, 0)));
|
|
CPPUNIT_ASSERT_EQUAL(u"2013-11-30"_ustr, pDoc->GetString(ScAddress(0, 13, 0)));
|
|
CPPUNIT_ASSERT_EQUAL(u"2013-12-31"_ustr, pDoc->GetString(ScAddress(0, 14, 0)));
|
|
CPPUNIT_ASSERT_EQUAL(u"2014-01-31"_ustr, pDoc->GetString(ScAddress(0, 15, 0)));
|
|
CPPUNIT_ASSERT_EQUAL(u"2014-02-28"_ustr, pDoc->GetString(ScAddress(0, 16, 0)));
|
|
CPPUNIT_ASSERT_EQUAL(u"2014-03-31"_ustr, pDoc->GetString(ScAddress(0, 17, 0)));
|
|
CPPUNIT_ASSERT_EQUAL(u"2014-04-30"_ustr, pDoc->GetString(ScAddress(0, 18, 0)));
|
|
CPPUNIT_ASSERT_EQUAL(u"2014-05-31"_ustr, pDoc->GetString(ScAddress(0, 19, 0)));
|
|
|
|
dispatchCommand(mxComponent, u".uno:Undo"_ustr, {});
|
|
|
|
CPPUNIT_ASSERT_EQUAL(u"2012-10-31"_ustr, pDoc->GetString(ScAddress(0, 0, 0)));
|
|
CPPUNIT_ASSERT_EQUAL(u""_ustr, pDoc->GetString(ScAddress(0, 1, 0)));
|
|
}
|
|
|
|
CPPUNIT_TEST_FIXTURE(ScUiCalcTest, testTdf147894)
|
|
{
|
|
createScDoc();
|
|
ScDocument* pDoc = getScDoc();
|
|
|
|
//Select the first row
|
|
goToCell(u"1:1"_ustr);
|
|
|
|
uno::Sequence<beans::PropertyValue> aArgs(
|
|
comphelper::InitPropertySequence({ { "FillDir", uno::Any(u"R"_ustr) },
|
|
{ "FillCmd", uno::Any(u"L"_ustr) },
|
|
{ "FillStep", uno::Any(u"1"_ustr) },
|
|
{ "FillDateCmd", uno::Any(u"D"_ustr) },
|
|
{ "FillStart", uno::Any(u"1"_ustr) } }));
|
|
|
|
// Without the fix in place, this test would have crashed here
|
|
dispatchCommand(mxComponent, u".uno:FillSeries"_ustr, aArgs);
|
|
|
|
CPPUNIT_ASSERT_EQUAL(1.0, pDoc->GetValue(ScAddress(0, 0, 0)));
|
|
CPPUNIT_ASSERT_EQUAL(16384.0, pDoc->GetValue(ScAddress(16383, 0, 0)));
|
|
}
|
|
|
|
CPPUNIT_TEST_FIXTURE(ScUiCalcTest, testTdf94208)
|
|
{
|
|
createScDoc();
|
|
ScDocument* pDoc = getScDoc();
|
|
|
|
insertStringToCell(u"A1"_ustr, u"=COUNTA(B:B)");
|
|
insertStringToCell(u"A3"_ustr, u"Range");
|
|
insertStringToCell(u"A4"_ustr, u"Range");
|
|
insertStringToCell(u"A5"_ustr, u"Range");
|
|
insertStringToCell(u"A6"_ustr, u"Range");
|
|
insertStringToCell(u"A7"_ustr, u"Range");
|
|
insertStringToCell(u"A8"_ustr, u"Range");
|
|
insertStringToCell(u"B6"_ustr, u"Test");
|
|
|
|
CPPUNIT_ASSERT_EQUAL(1.0, pDoc->GetValue(ScAddress(0, 0, 0)));
|
|
|
|
goToCell(u"A3:A8"_ustr);
|
|
|
|
dispatchCommand(mxComponent, u".uno:SelectRow"_ustr, {});
|
|
|
|
//type Control-D/Fill Down
|
|
dispatchCommand(mxComponent, u".uno:FillDown"_ustr, {});
|
|
|
|
CPPUNIT_ASSERT_EQUAL(0.0, pDoc->GetValue(ScAddress(0, 0, 0)));
|
|
|
|
dispatchCommand(mxComponent, u".uno:Undo"_ustr, {});
|
|
|
|
// Without the fix in place, this test would have failed with
|
|
// - Expected: 1
|
|
// - Actual : 0
|
|
CPPUNIT_ASSERT_EQUAL(1.0, pDoc->GetValue(ScAddress(0, 0, 0)));
|
|
|
|
for (SCROW i = 2; i < 8; ++i)
|
|
{
|
|
CPPUNIT_ASSERT_EQUAL(u"Range"_ustr, pDoc->GetString(ScAddress(0, i, 0)));
|
|
}
|
|
|
|
CPPUNIT_ASSERT_EQUAL(u"Test"_ustr, pDoc->GetString(ScAddress(1, 5, 0)));
|
|
}
|
|
|
|
CPPUNIT_TEST_FIXTURE(ScUiCalcTest, testTdf37623)
|
|
{
|
|
createScDoc();
|
|
ScDocument* pDoc = getScDoc();
|
|
|
|
goToCell(u"A3:A4"_ustr);
|
|
|
|
dispatchCommand(mxComponent, u".uno:HideRow"_ustr, {});
|
|
|
|
insertStringToCell(u"A2"_ustr, u"1");
|
|
|
|
goToCell(u"A2:A6"_ustr);
|
|
|
|
uno::Sequence<beans::PropertyValue> aArgs(
|
|
comphelper::InitPropertySequence({ { "FillDir", uno::Any(u"B"_ustr) },
|
|
{ "FillCmd", uno::Any(u"A"_ustr) },
|
|
{ "FillStep", uno::Any(u"1"_ustr) },
|
|
{ "FillDateCmd", uno::Any(u"M"_ustr) } }));
|
|
dispatchCommand(mxComponent, u".uno:FillSeries"_ustr, aArgs);
|
|
|
|
CPPUNIT_ASSERT_EQUAL(1.0, pDoc->GetValue(ScAddress(0, 1, 0)));
|
|
CPPUNIT_ASSERT_EQUAL(0.0, pDoc->GetValue(ScAddress(0, 2, 0)));
|
|
CPPUNIT_ASSERT_EQUAL(0.0, pDoc->GetValue(ScAddress(0, 3, 0)));
|
|
CPPUNIT_ASSERT_EQUAL(2.0, pDoc->GetValue(ScAddress(0, 4, 0)));
|
|
CPPUNIT_ASSERT_EQUAL(3.0, pDoc->GetValue(ScAddress(0, 5, 0)));
|
|
}
|
|
|
|
CPPUNIT_TEST_FIXTURE(ScUiCalcTest, testTdf144308)
|
|
{
|
|
createScDoc();
|
|
ScDocument* pDoc = getScDoc();
|
|
|
|
css::uno::Reference<css::sheet::XGlobalSheetSettings> xGlobalSheetSettings
|
|
= css::sheet::GlobalSheetSettings::create(::comphelper::getProcessComponentContext());
|
|
bool bOldValue = xGlobalSheetSettings->getDoAutoComplete();
|
|
|
|
xGlobalSheetSettings->setDoAutoComplete(true);
|
|
|
|
insertStringToCell(u"A1"_ustr, u"ABC");
|
|
|
|
insertStringToCell(u"A2"_ustr, u"A");
|
|
|
|
CPPUNIT_ASSERT_EQUAL(u"ABC"_ustr, pDoc->GetString(ScAddress(0, 1, 0)));
|
|
|
|
xGlobalSheetSettings->setDoAutoComplete(false);
|
|
|
|
insertStringToCell(u"A3"_ustr, u"A");
|
|
|
|
// Without the fix in place, this test would have failed with
|
|
// - Expected: A
|
|
// - Actual : ABC
|
|
CPPUNIT_ASSERT_EQUAL(u"A"_ustr, pDoc->GetString(ScAddress(0, 2, 0)));
|
|
|
|
// Restore the previous value
|
|
xGlobalSheetSettings->setDoAutoComplete(bOldValue);
|
|
}
|
|
|
|
CPPUNIT_TEST_FIXTURE(ScUiCalcTest, testPasteWithReturnKey)
|
|
{
|
|
createScDoc();
|
|
ScDocument* pDoc = getScDoc();
|
|
ScModelObj* pModelObj = comphelper::getFromUnoTunnel<ScModelObj>(mxComponent);
|
|
|
|
insertStringToCell(u"A1"_ustr, u"Test");
|
|
|
|
goToCell(u"A1"_ustr);
|
|
|
|
for (SCROW i = 1; i <= 10; ++i)
|
|
{
|
|
dispatchCommand(mxComponent, u".uno:Copy"_ustr, {});
|
|
|
|
dispatchCommand(mxComponent, u".uno:GoDown"_ustr, {});
|
|
|
|
// Paste using Return
|
|
pModelObj->postKeyEvent(LOK_KEYEVENT_KEYINPUT, 0, awt::Key::RETURN);
|
|
pModelObj->postKeyEvent(LOK_KEYEVENT_KEYUP, 0, awt::Key::RETURN);
|
|
Scheduler::ProcessEventsToIdle();
|
|
|
|
CPPUNIT_ASSERT_EQUAL(u"Test"_ustr, pDoc->GetString(ScAddress(0, i, 0)));
|
|
}
|
|
}
|
|
|
|
CPPUNIT_TEST_FIXTURE(ScUiCalcTest, testTdf56036)
|
|
{
|
|
createScDoc();
|
|
ScDocument* pDoc = getScDoc();
|
|
|
|
goToCell(u"A1"_ustr);
|
|
|
|
typeString(u"=SUM( 1 + 2 ");
|
|
|
|
// Insert Newline
|
|
ScModelObj* pModelObj = comphelper::getFromUnoTunnel<ScModelObj>(mxComponent);
|
|
pModelObj->postKeyEvent(LOK_KEYEVENT_KEYINPUT, 0, KEY_MOD1 | awt::Key::RETURN);
|
|
pModelObj->postKeyEvent(LOK_KEYEVENT_KEYUP, 0, KEY_MOD1 | awt::Key::RETURN);
|
|
Scheduler::ProcessEventsToIdle();
|
|
|
|
typeString(u"+ 3)");
|
|
|
|
pModelObj->postKeyEvent(LOK_KEYEVENT_KEYINPUT, 0, awt::Key::RETURN);
|
|
pModelObj->postKeyEvent(LOK_KEYEVENT_KEYUP, 0, awt::Key::RETURN);
|
|
Scheduler::ProcessEventsToIdle();
|
|
|
|
// Without the fix in place, this test would have failed with
|
|
// - Expected: 6
|
|
// - Actual : Err:501
|
|
CPPUNIT_ASSERT_EQUAL(u"6"_ustr, pDoc->GetString(ScAddress(0, 0, 0)));
|
|
}
|
|
|
|
CPPUNIT_TEST_FIXTURE(ScUiCalcTest, testTdf154174_repeat_empty)
|
|
{
|
|
createScDoc();
|
|
|
|
insertStringToCell(u"A1"_ustr, u"aaaa");
|
|
|
|
ScModelObj* pModelObj = comphelper::getFromUnoTunnel<ScModelObj>(mxComponent);
|
|
pModelObj->postKeyEvent(LOK_KEYEVENT_KEYINPUT, 0, KEY_MOD1 | KEY_SHIFT | awt::Key::Y);
|
|
pModelObj->postKeyEvent(LOK_KEYEVENT_KEYUP, 0, KEY_MOD1 | KEY_SHIFT | awt::Key::Y);
|
|
Scheduler::ProcessEventsToIdle();
|
|
|
|
ScDocument* pDoc = getScDoc();
|
|
CPPUNIT_ASSERT_EQUAL(u"aaaa"_ustr, pDoc->GetString(ScAddress(0, 1, 0)));
|
|
|
|
pModelObj->postKeyEvent(LOK_KEYEVENT_KEYINPUT, 0, awt::Key::F2);
|
|
pModelObj->postKeyEvent(LOK_KEYEVENT_KEYUP, 0, awt::Key::F2);
|
|
Scheduler::ProcessEventsToIdle();
|
|
|
|
pModelObj->postKeyEvent(LOK_KEYEVENT_KEYINPUT, 0, awt::Key::DELETE);
|
|
pModelObj->postKeyEvent(LOK_KEYEVENT_KEYUP, 0, awt::Key::DELETE);
|
|
Scheduler::ProcessEventsToIdle();
|
|
|
|
pModelObj->postKeyEvent(LOK_KEYEVENT_KEYINPUT, 0, awt::Key::RETURN);
|
|
pModelObj->postKeyEvent(LOK_KEYEVENT_KEYUP, 0, awt::Key::RETURN);
|
|
Scheduler::ProcessEventsToIdle();
|
|
|
|
// Without the fix in place, this test would have failed with
|
|
// - Expected: aaaa
|
|
// - Actual :
|
|
CPPUNIT_ASSERT_EQUAL(u"aaaa"_ustr, pDoc->GetString(ScAddress(0, 1, 0)));
|
|
}
|
|
|
|
CPPUNIT_TEST_FIXTURE(ScUiCalcTest, testTdf119162)
|
|
{
|
|
createScDoc();
|
|
ScDocument* pDoc = getScDoc();
|
|
|
|
goToCell(u"A1"_ustr);
|
|
|
|
typeString(u"Test");
|
|
|
|
// Insert Newline
|
|
ScModelObj* pModelObj = comphelper::getFromUnoTunnel<ScModelObj>(mxComponent);
|
|
pModelObj->postKeyEvent(LOK_KEYEVENT_KEYINPUT, 0, KEY_MOD1 | awt::Key::RETURN);
|
|
pModelObj->postKeyEvent(LOK_KEYEVENT_KEYUP, 0, KEY_MOD1 | awt::Key::RETURN);
|
|
Scheduler::ProcessEventsToIdle();
|
|
|
|
pModelObj->postKeyEvent(LOK_KEYEVENT_KEYINPUT, 0, awt::Key::RETURN);
|
|
pModelObj->postKeyEvent(LOK_KEYEVENT_KEYUP, 0, awt::Key::RETURN);
|
|
Scheduler::ProcessEventsToIdle();
|
|
|
|
CPPUNIT_ASSERT_EQUAL(OUString(u"Test" + OUStringChar(u'\xA')),
|
|
pDoc->GetString(ScAddress(0, 0, 0)));
|
|
|
|
goToCell(u"A1"_ustr);
|
|
|
|
// Without the fix in place, this test would have hung here
|
|
dispatchCommand(mxComponent, u".uno:ChangeCaseRotateCase"_ustr, {});
|
|
|
|
CPPUNIT_ASSERT_EQUAL(OUString(u"Test" + OUStringChar(u'\xA')),
|
|
pDoc->GetString(ScAddress(0, 0, 0)));
|
|
|
|
dispatchCommand(mxComponent, u".uno:ChangeCaseToLower"_ustr, {});
|
|
|
|
CPPUNIT_ASSERT_EQUAL(OUString(u"test" + OUStringChar(u'\xA')),
|
|
pDoc->GetString(ScAddress(0, 0, 0)));
|
|
}
|
|
|
|
CPPUNIT_TEST_FIXTURE(ScUiCalcTest, testTdf90579)
|
|
{
|
|
createScDoc();
|
|
ScDocument* pDoc = getScDoc();
|
|
|
|
insertStringToCell(u"A1"_ustr, u"2300");
|
|
insertStringToCell(u"A2"_ustr, u"Libre");
|
|
insertStringToCell(u"B1"_ustr, u"10");
|
|
insertStringToCell(u"B2"_ustr, u"Office");
|
|
insertStringToCell(u"C1"_ustr, u"=SUM(A1:B1)");
|
|
insertStringToCell(u"C2"_ustr, u"=A2&B2");
|
|
|
|
CPPUNIT_ASSERT_EQUAL(u"2310"_ustr, pDoc->GetString(ScAddress(2, 0, 0)));
|
|
CPPUNIT_ASSERT_EQUAL(u"LibreOffice"_ustr, pDoc->GetString(ScAddress(2, 1, 0)));
|
|
|
|
goToCell(u"C1:C2"_ustr);
|
|
|
|
dispatchCommand(mxComponent, u".uno:ConvertFormulaToValue"_ustr, {});
|
|
|
|
CPPUNIT_ASSERT_EQUAL(u"2310"_ustr, pDoc->GetString(ScAddress(2, 0, 0)));
|
|
CPPUNIT_ASSERT_EQUAL(u"LibreOffice"_ustr, pDoc->GetString(ScAddress(2, 1, 0)));
|
|
CPPUNIT_ASSERT_EQUAL(u""_ustr, pDoc->GetFormula(2, 0, 0));
|
|
CPPUNIT_ASSERT_EQUAL(u""_ustr, pDoc->GetFormula(2, 1, 0));
|
|
|
|
dispatchCommand(mxComponent, u".uno:Undo"_ustr, {});
|
|
|
|
CPPUNIT_ASSERT_EQUAL(u"2310"_ustr, pDoc->GetString(ScAddress(2, 0, 0)));
|
|
CPPUNIT_ASSERT_EQUAL(u"LibreOffice"_ustr, pDoc->GetString(ScAddress(2, 1, 0)));
|
|
CPPUNIT_ASSERT_EQUAL(u"=SUM(A1:B1)"_ustr, pDoc->GetFormula(2, 0, 0));
|
|
CPPUNIT_ASSERT_EQUAL(u"=A2&B2"_ustr, pDoc->GetFormula(2, 1, 0));
|
|
}
|
|
|
|
CPPUNIT_TEST_FIXTURE(ScUiCalcTest, testTdf124820)
|
|
{
|
|
createScDoc("tdf124820.xlsx");
|
|
ScDocument* pDoc = getScDoc();
|
|
|
|
goToCell(u"B2"_ustr);
|
|
|
|
dispatchCommand(mxComponent, u".uno:Strikeout"_ustr, {});
|
|
|
|
saveAndReload(u"Calc Office Open XML"_ustr);
|
|
pDoc = getScDoc();
|
|
|
|
vcl::Font aFont;
|
|
const ScPatternAttr* pPattern = pDoc->GetPattern(1, 1, 0);
|
|
pPattern->fillFontOnly(aFont);
|
|
|
|
// Without the fix in place, this test would have failed here
|
|
CPPUNIT_ASSERT_EQUAL_MESSAGE("font should be striked out", STRIKEOUT_SINGLE,
|
|
aFont.GetStrikeout());
|
|
}
|
|
|
|
CPPUNIT_TEST_FIXTURE(ScUiCalcTest, testTdf132026)
|
|
{
|
|
createScDoc("tdf132026.ods");
|
|
ScDocument* pDoc = getScDoc();
|
|
std::vector<std::u16string_view> aChars{ u"=", u"+", u"-" };
|
|
std::vector<sal_uInt16> aDirections{ KEY_UP, KEY_DOWN, KEY_LEFT, KEY_RIGHT };
|
|
|
|
ScModelObj* pModelObj = comphelper::getFromUnoTunnel<ScModelObj>(mxComponent);
|
|
for (auto aChar = aChars.begin(); aChar != aChars.end(); ++aChar)
|
|
{
|
|
for (size_t i = 0; i < aDirections.size(); ++i)
|
|
{
|
|
goToCell(u"B2"_ustr);
|
|
typeString(*aChar);
|
|
|
|
sal_uInt16 nDir = aDirections[i];
|
|
pModelObj->postKeyEvent(LOK_KEYEVENT_KEYINPUT, 0, nDir);
|
|
pModelObj->postKeyEvent(LOK_KEYEVENT_KEYUP, 0, nDir);
|
|
Scheduler::ProcessEventsToIdle();
|
|
|
|
pModelObj->postKeyEvent(LOK_KEYEVENT_KEYINPUT, 0, awt::Key::RETURN);
|
|
pModelObj->postKeyEvent(LOK_KEYEVENT_KEYUP, 0, awt::Key::RETURN);
|
|
Scheduler::ProcessEventsToIdle();
|
|
|
|
sal_Int16 nSign = (*aChar == u"-") ? -1 : 1;
|
|
sal_Int16 nExpected = nSign * (i + 1);
|
|
OUString sExpectedResult = OUString::number(nExpected);
|
|
CPPUNIT_ASSERT_EQUAL(sExpectedResult, pDoc->GetString(ScAddress(1, 1, 0)));
|
|
|
|
goToCell(u"E2"_ustr);
|
|
typeString(*aChar);
|
|
|
|
pModelObj->postKeyEvent(LOK_KEYEVENT_KEYINPUT, 0, nDir);
|
|
pModelObj->postKeyEvent(LOK_KEYEVENT_KEYUP, 0, nDir);
|
|
Scheduler::ProcessEventsToIdle();
|
|
|
|
pModelObj->postKeyEvent(LOK_KEYEVENT_KEYINPUT, 0, awt::Key::RETURN);
|
|
pModelObj->postKeyEvent(LOK_KEYEVENT_KEYUP, 0, awt::Key::RETURN);
|
|
Scheduler::ProcessEventsToIdle();
|
|
|
|
// Without the fix in place, this test would have failed with
|
|
// - Expected: =
|
|
// - Actual : =E1
|
|
CPPUNIT_ASSERT_EQUAL(OUString(*aChar), pDoc->GetString(ScAddress(4, 1, 0)));
|
|
}
|
|
}
|
|
}
|
|
|
|
CPPUNIT_TEST_FIXTURE(ScUiCalcTest, testTdf152037)
|
|
{
|
|
createScDoc("tdf152037.xlsx");
|
|
|
|
insertStringToCell(u"C2"_ustr, u"abcdefghi");
|
|
|
|
ScDocument* pDoc = getScDoc();
|
|
|
|
// Without the fix in place, this test would have failed with
|
|
// - Expected: abcdefghi
|
|
// - Actual :
|
|
CPPUNIT_ASSERT_EQUAL(u"abcdefghi"_ustr, pDoc->GetString(ScAddress(2, 1, 0)));
|
|
}
|
|
|
|
CPPUNIT_TEST_FIXTURE(ScUiCalcTest, testTdf119155)
|
|
{
|
|
createScDoc("tdf119155.xlsx");
|
|
ScDocument* pDoc = getScDoc();
|
|
|
|
goToCell(u"C2:C14"_ustr);
|
|
|
|
// Without the fix in place, this test would have hung here
|
|
dispatchCommand(mxComponent, u".uno:ChangeCaseToTitleCase"_ustr, {});
|
|
|
|
CPPUNIT_ASSERT_EQUAL(u"Collagene Expert Targeted Wrinkle Corrector Unboxed 10 Ml"_ustr,
|
|
pDoc->GetString(ScAddress(2, 1, 0)));
|
|
CPPUNIT_ASSERT_EQUAL(u"Vitamina Suractivee Hand Cream 400 Ml"_ustr,
|
|
pDoc->GetString(ScAddress(2, 13, 0)));
|
|
}
|
|
|
|
CPPUNIT_TEST_FIXTURE(ScUiCalcTest, testTdf146795)
|
|
{
|
|
createScDoc("tdf146795.ods");
|
|
ScDocument* pDoc = getScDoc();
|
|
|
|
// Disable replace cell warning
|
|
ScModule* pMod = ScModule::get();
|
|
ScInputOptions aInputOption = pMod->GetInputOptions();
|
|
bool bOldStatus = aInputOption.GetReplaceCellsWarn();
|
|
aInputOption.SetReplaceCellsWarn(false);
|
|
pMod->SetInputOptions(aInputOption);
|
|
|
|
goToCell(u"B2"_ustr);
|
|
|
|
dispatchCommand(mxComponent, u".uno:Copy"_ustr, {});
|
|
|
|
// Move to B3
|
|
ScModelObj* pModelObj = comphelper::getFromUnoTunnel<ScModelObj>(mxComponent);
|
|
pModelObj->postKeyEvent(LOK_KEYEVENT_KEYINPUT, 0, KEY_DOWN);
|
|
Scheduler::ProcessEventsToIdle();
|
|
|
|
// Select the three following cells
|
|
pModelObj->postKeyEvent(LOK_KEYEVENT_KEYINPUT, 0, KEY_SHIFT | KEY_DOWN);
|
|
pModelObj->postKeyEvent(LOK_KEYEVENT_KEYINPUT, 0, KEY_SHIFT | KEY_DOWN);
|
|
pModelObj->postKeyEvent(LOK_KEYEVENT_KEYINPUT, 0, KEY_SHIFT | KEY_DOWN);
|
|
Scheduler::ProcessEventsToIdle();
|
|
|
|
// Without the fix in place, this test would have crashed here
|
|
dispatchCommand(mxComponent, u".uno:Paste"_ustr, {});
|
|
|
|
CPPUNIT_ASSERT_EQUAL(u"a"_ustr, pDoc->GetString(ScAddress(1, 1, 0)));
|
|
CPPUNIT_ASSERT_EQUAL(u"a"_ustr, pDoc->GetString(ScAddress(1, 2, 0)));
|
|
CPPUNIT_ASSERT_EQUAL(u"a"_ustr, pDoc->GetString(ScAddress(1, 3, 0)));
|
|
CPPUNIT_ASSERT_EQUAL(u"44"_ustr, pDoc->GetString(ScAddress(1, 4, 0)));
|
|
CPPUNIT_ASSERT_EQUAL(u"44"_ustr, pDoc->GetString(ScAddress(1, 5, 0)));
|
|
CPPUNIT_ASSERT_EQUAL(u"a"_ustr, pDoc->GetString(ScAddress(1, 6, 0)));
|
|
CPPUNIT_ASSERT_EQUAL(u"a"_ustr, pDoc->GetString(ScAddress(1, 7, 0)));
|
|
CPPUNIT_ASSERT_EQUAL(u"44"_ustr, pDoc->GetString(ScAddress(1, 8, 0)));
|
|
|
|
// Restore previous status
|
|
aInputOption.SetReplaceCellsWarn(bOldStatus);
|
|
pMod->SetInputOptions(aInputOption);
|
|
}
|
|
|
|
CPPUNIT_TEST_FIXTURE(ScUiCalcTest, testTdf147744)
|
|
{
|
|
createScDoc("tdf147744.ods");
|
|
ScDocument* pDoc = getScDoc();
|
|
|
|
// Disable replace cell warning
|
|
ScModule* pMod = ScModule::get();
|
|
ScInputOptions aInputOption = pMod->GetInputOptions();
|
|
bool bOldStatus = aInputOption.GetReplaceCellsWarn();
|
|
aInputOption.SetReplaceCellsWarn(false);
|
|
pMod->SetInputOptions(aInputOption);
|
|
|
|
goToCell(u"A2"_ustr);
|
|
|
|
dispatchCommand(mxComponent, u".uno:Copy"_ustr, {});
|
|
|
|
// Move to A3
|
|
ScModelObj* pModelObj = comphelper::getFromUnoTunnel<ScModelObj>(mxComponent);
|
|
pModelObj->postKeyEvent(LOK_KEYEVENT_KEYINPUT, 0, KEY_DOWN);
|
|
Scheduler::ProcessEventsToIdle();
|
|
|
|
// Select the following cell
|
|
pModelObj->postKeyEvent(LOK_KEYEVENT_KEYINPUT, 0, KEY_SHIFT | KEY_DOWN);
|
|
Scheduler::ProcessEventsToIdle();
|
|
|
|
// Without the fix in place, this test would have crashed here
|
|
dispatchCommand(mxComponent, u".uno:Paste"_ustr, {});
|
|
|
|
CPPUNIT_ASSERT_EQUAL(1.0, pDoc->GetValue(ScAddress(0, 1, 0)));
|
|
CPPUNIT_ASSERT_EQUAL(0.0, pDoc->GetValue(ScAddress(0, 2, 0)));
|
|
CPPUNIT_ASSERT_EQUAL(1.0, pDoc->GetValue(ScAddress(0, 3, 0)));
|
|
CPPUNIT_ASSERT_EQUAL(0.0, pDoc->GetValue(ScAddress(0, 4, 0)));
|
|
CPPUNIT_ASSERT_EQUAL(1.0, pDoc->GetValue(ScAddress(0, 5, 0)));
|
|
CPPUNIT_ASSERT_EQUAL(0.0, pDoc->GetValue(ScAddress(0, 6, 0)));
|
|
|
|
// Restore previous status
|
|
aInputOption.SetReplaceCellsWarn(bOldStatus);
|
|
pMod->SetInputOptions(aInputOption);
|
|
}
|
|
|
|
CPPUNIT_TEST_FIXTURE(ScUiCalcTest, testTdf138432)
|
|
{
|
|
createScDoc("tdf138432.ods");
|
|
ScDocument* pDoc = getScDoc();
|
|
|
|
// Set the system locale to Hungarian
|
|
SvtSysLocaleOptions aOptions;
|
|
OUString sLocaleConfigString = aOptions.GetLanguageTag().getBcp47();
|
|
aOptions.SetLocaleConfigString(u"hu-HU"_ustr);
|
|
aOptions.Commit();
|
|
comphelper::ScopeGuard g([&aOptions, &sLocaleConfigString] {
|
|
aOptions.SetLocaleConfigString(sLocaleConfigString);
|
|
aOptions.Commit();
|
|
});
|
|
|
|
OUString sExpectedA1 = "12" + OUStringChar(u'\xa0') + "345,67";
|
|
CPPUNIT_ASSERT_EQUAL(sExpectedA1, pDoc->GetString(ScAddress(0, 0, 0)));
|
|
|
|
goToCell(u"A1"_ustr);
|
|
|
|
dispatchCommand(mxComponent, u".uno:Copy"_ustr, {});
|
|
|
|
goToCell(u"A2"_ustr);
|
|
|
|
typeString(u"=");
|
|
|
|
dispatchCommand(mxComponent, u".uno:Paste"_ustr, {});
|
|
|
|
ScModelObj* pModelObj = comphelper::getFromUnoTunnel<ScModelObj>(mxComponent);
|
|
pModelObj->postKeyEvent(LOK_KEYEVENT_KEYINPUT, 0, awt::Key::RETURN);
|
|
pModelObj->postKeyEvent(LOK_KEYEVENT_KEYUP, 0, awt::Key::RETURN);
|
|
Scheduler::ProcessEventsToIdle();
|
|
|
|
// Without the fix in place, this test would have failed with
|
|
// - Expected: 12345,67
|
|
// - Actual : Err:509
|
|
CPPUNIT_ASSERT_EQUAL(u"12345,67"_ustr, pDoc->GetString(ScAddress(0, 1, 0)));
|
|
}
|
|
|
|
CPPUNIT_TEST_FIXTURE(ScUiCalcTest, testTdf143896)
|
|
{
|
|
createScDoc();
|
|
ScDocument* pDoc = getScDoc();
|
|
|
|
insertStringToCell(u"A2000"_ustr, u"Test");
|
|
|
|
CPPUNIT_ASSERT_EQUAL(u"Test"_ustr, pDoc->GetString(ScAddress(0, 1999, 0)));
|
|
|
|
saveAndReload(u"Calc Office Open XML"_ustr);
|
|
pDoc = getScDoc();
|
|
|
|
// Without the fix in place, this test would have failed with
|
|
// - Expected: Test
|
|
// - Actual :
|
|
CPPUNIT_ASSERT_EQUAL(u"Test"_ustr, pDoc->GetString(ScAddress(0, 1999, 0)));
|
|
}
|
|
|
|
CPPUNIT_TEST_FIXTURE(ScUiCalcTest, testTdf145085)
|
|
{
|
|
createScDoc();
|
|
ScDocument* pDoc = getScDoc();
|
|
|
|
insertArrayToCell(u"A1"_ustr, u"=HYPERLINK(\"a\";\"b\")");
|
|
|
|
CPPUNIT_ASSERT_EQUAL(u"b"_ustr, pDoc->GetString(ScAddress(0, 0, 0)));
|
|
|
|
// Without the fix in place, this test would have failed with
|
|
// - Expected:
|
|
// - Actual : a
|
|
CPPUNIT_ASSERT_EQUAL(u""_ustr, pDoc->GetString(ScAddress(0, 1, 0)));
|
|
}
|
|
|
|
CPPUNIT_TEST_FIXTURE(ScUiCalcTest, testTdf154125)
|
|
{
|
|
createScDoc();
|
|
ScDocument* pDoc = getScDoc();
|
|
|
|
insertArrayToCell(u"A1"_ustr, u"=INDEX({11;21},0,1)");
|
|
|
|
CPPUNIT_ASSERT_EQUAL(u"11"_ustr, pDoc->GetString(ScAddress(0, 0, 0)));
|
|
|
|
// Without the fix in place, this test would have failed with
|
|
// - Expected: 21
|
|
// - Actual :
|
|
CPPUNIT_ASSERT_EQUAL(u"21"_ustr, pDoc->GetString(ScAddress(0, 1, 0)));
|
|
}
|
|
|
|
CPPUNIT_TEST_FIXTURE(ScUiCalcTest, testTdf159046)
|
|
{
|
|
createScDoc("tdf159046.ods");
|
|
ScDocument* pDoc = getScDoc();
|
|
ScDrawLayer* pDrawLayer = pDoc->GetDrawLayer();
|
|
|
|
std::map<SCROW, std::vector<SdrObject*>> aObjects
|
|
= pDrawLayer->GetObjectsAnchoredToRange(0, 0, 6, 8);
|
|
CPPUNIT_ASSERT_EQUAL(size_t(1), aObjects.size());
|
|
|
|
aObjects = pDrawLayer->GetObjectsAnchoredToRange(0, 1, 6, 8);
|
|
CPPUNIT_ASSERT_EQUAL(size_t(0), aObjects.size());
|
|
|
|
goToCell(u"A2:F10"_ustr);
|
|
dispatchCommand(mxComponent, u".uno:Cut"_ustr, {});
|
|
|
|
goToCell(u"B2"_ustr);
|
|
dispatchCommand(mxComponent, u".uno:Paste"_ustr, {});
|
|
|
|
// Without the fix in place, this test would have crashed here
|
|
saveAndReload(u"calc8"_ustr);
|
|
|
|
pDoc = getScDoc();
|
|
pDrawLayer = pDoc->GetDrawLayer();
|
|
|
|
aObjects = pDrawLayer->GetObjectsAnchoredToRange(0, 0, 6, 8);
|
|
CPPUNIT_ASSERT_EQUAL(size_t(0), aObjects.size());
|
|
|
|
aObjects = pDrawLayer->GetObjectsAnchoredToRange(0, 1, 6, 8);
|
|
CPPUNIT_ASSERT_EQUAL(size_t(1), aObjects.size());
|
|
}
|
|
|
|
CPPUNIT_TEST_FIXTURE(ScUiCalcTest, testTdf148863)
|
|
{
|
|
createScDoc();
|
|
ScDocument* pDoc = getScDoc();
|
|
|
|
insertArrayToCell(u"A1"_ustr, u"=TRANSPOSE(IF({0|0|0}=0;RANDBETWEEN.NV(1;1000000)))");
|
|
|
|
double nA1 = pDoc->GetValue(ScAddress(0, 0, 0));
|
|
double nB1 = pDoc->GetValue(ScAddress(1, 0, 0));
|
|
double nC1 = pDoc->GetValue(ScAddress(2, 0, 0));
|
|
|
|
// Without the fix in place, this test would have failed here
|
|
CPPUNIT_ASSERT(nA1 != nB1);
|
|
CPPUNIT_ASSERT(nA1 != nC1);
|
|
CPPUNIT_ASSERT(nB1 != nC1);
|
|
}
|
|
|
|
CPPUNIT_TEST_FIXTURE(ScUiCalcTest, testTdf144244)
|
|
{
|
|
createScDoc("tdf144244.ods");
|
|
ScDocument* pDoc = getScDoc();
|
|
|
|
ScModelObj* pModelObj = comphelper::getFromUnoTunnel<ScModelObj>(mxComponent);
|
|
uno::Reference<drawing::XDrawPage> xPage(pModelObj->getDrawPages()->getByIndex(0),
|
|
uno::UNO_QUERY_THROW);
|
|
CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(2), xPage->getCount());
|
|
|
|
// Select column A and B
|
|
goToCell(u"A:B"_ustr);
|
|
|
|
dispatchCommand(mxComponent, u".uno:DeleteColumns"_ustr, {});
|
|
|
|
CPPUNIT_ASSERT_EQUAL(u"x"_ustr, pDoc->GetString(ScAddress(0, 0, 0)));
|
|
|
|
// Without the fix in place, this test would have crashed
|
|
saveAndReload(u"calc8"_ustr);
|
|
pModelObj = comphelper::getFromUnoTunnel<ScModelObj>(mxComponent);
|
|
pDoc = getScDoc();
|
|
|
|
CPPUNIT_ASSERT_EQUAL(u"x"_ustr, pDoc->GetString(ScAddress(0, 0, 0)));
|
|
|
|
xPage.set(pModelObj->getDrawPages()->getByIndex(0), uno::UNO_QUERY_THROW);
|
|
CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(2), xPage->getCount());
|
|
}
|
|
|
|
CPPUNIT_TEST_FIXTURE(ScUiCalcTest, testTdf153669)
|
|
{
|
|
createScDoc("tdf153669.ods");
|
|
ScDocument* pDoc = getScDoc();
|
|
|
|
// Disable replace cell warning
|
|
ScModule* pMod = ScModule::get();
|
|
ScInputOptions aInputOption = pMod->GetInputOptions();
|
|
bool bOldStatus = aInputOption.GetReplaceCellsWarn();
|
|
aInputOption.SetReplaceCellsWarn(false);
|
|
pMod->SetInputOptions(aInputOption);
|
|
|
|
insertStringToCell(u"E2"_ustr, u"100");
|
|
|
|
CPPUNIT_ASSERT_EQUAL(u"110.00"_ustr, pDoc->GetString(ScAddress(5, 1, 0)));
|
|
|
|
dispatchCommand(mxComponent, u".uno:Undo"_ustr, {});
|
|
|
|
CPPUNIT_ASSERT_EQUAL(u"15.00"_ustr, pDoc->GetString(ScAddress(5, 1, 0)));
|
|
|
|
goToCell(u"E7"_ustr);
|
|
|
|
dispatchCommand(mxComponent, u".uno:Copy"_ustr, {});
|
|
|
|
goToCell(u"F7"_ustr);
|
|
|
|
dispatchCommand(mxComponent, u".uno:Paste"_ustr, {});
|
|
|
|
CPPUNIT_ASSERT_EQUAL(u"text"_ustr, pDoc->GetString(ScAddress(5, 6, 0)));
|
|
|
|
insertStringToCell(u"E2"_ustr, u"100");
|
|
|
|
// Without the fix in place, this test would have failed with
|
|
// - Expected: 110.00
|
|
// - Actual : 15.00
|
|
CPPUNIT_ASSERT_EQUAL(u"110.00"_ustr, pDoc->GetString(ScAddress(5, 1, 0)));
|
|
|
|
dispatchCommand(mxComponent, u".uno:Undo"_ustr, {});
|
|
|
|
CPPUNIT_ASSERT_EQUAL(u"15.00"_ustr, pDoc->GetString(ScAddress(5, 1, 0)));
|
|
|
|
// Restore previous status
|
|
aInputOption.SetReplaceCellsWarn(bOldStatus);
|
|
pMod->SetInputOptions(aInputOption);
|
|
}
|
|
|
|
CPPUNIT_TEST_FIXTURE(ScUiCalcTest, testTdf100582)
|
|
{
|
|
createScDoc("tdf100582.xls");
|
|
ScDocument* pDoc = getScDoc();
|
|
|
|
// Disable replace cell warning
|
|
ScModule* pMod = ScModule::get();
|
|
ScInputOptions aInputOption = pMod->GetInputOptions();
|
|
bool bOldStatus = aInputOption.GetReplaceCellsWarn();
|
|
aInputOption.SetReplaceCellsWarn(false);
|
|
pMod->SetInputOptions(aInputOption);
|
|
|
|
goToCell(u"C10"_ustr);
|
|
|
|
dispatchCommand(mxComponent, u".uno:Copy"_ustr, {});
|
|
|
|
goToCell(u"C10:H14"_ustr);
|
|
|
|
dispatchCommand(mxComponent, u".uno:Paste"_ustr, {});
|
|
|
|
saveAndReload(u"MS Excel 97"_ustr);
|
|
pDoc = getScDoc();
|
|
|
|
OUString aFormula = pDoc->GetFormula(3, 10, 0);
|
|
|
|
// Without the fix in place, this test would have failed with
|
|
// - Expected: {=SUM(($B$3:$B$7=$B11)*(D$3:D$7))}
|
|
//- Actual :
|
|
CPPUNIT_ASSERT_EQUAL(u"{=SUM(($B$3:$B$7=$B11)*(D$3:D$7))}"_ustr, aFormula);
|
|
aFormula = pDoc->GetFormula(4, 10, 0);
|
|
CPPUNIT_ASSERT_EQUAL(u"{=SUM(($B$3:$B$7=$B11)*(E$3:E$7))}"_ustr, aFormula);
|
|
aFormula = pDoc->GetFormula(5, 10, 0);
|
|
CPPUNIT_ASSERT_EQUAL(u"{=SUM(($B$3:$B$7=$B11)*(F$3:F$7))}"_ustr, aFormula);
|
|
aFormula = pDoc->GetFormula(6, 10, 0);
|
|
CPPUNIT_ASSERT_EQUAL(u"{=SUM(($B$3:$B$7=$B11)*(G$3:G$7))}"_ustr, aFormula);
|
|
aFormula = pDoc->GetFormula(7, 10, 0);
|
|
CPPUNIT_ASSERT_EQUAL(u"{=SUM(($B$3:$B$7=$B11)*(H$3:H$7))}"_ustr, aFormula);
|
|
|
|
// Restore previous status
|
|
aInputOption.SetReplaceCellsWarn(bOldStatus);
|
|
pMod->SetInputOptions(aInputOption);
|
|
}
|
|
|
|
CPPUNIT_TEST_FIXTURE(ScUiCalcTest, testTdf145640)
|
|
{
|
|
createScDoc("tdf145640.ods");
|
|
ScDocument* pDoc = getScDoc();
|
|
|
|
// Enable sorting with update reference
|
|
ScModule* pMod = ScModule::get();
|
|
ScInputOptions aInputOption = pMod->GetInputOptions();
|
|
bool bOldStatus = aInputOption.GetSortRefUpdate();
|
|
aInputOption.SetSortRefUpdate(true);
|
|
pMod->SetInputOptions(aInputOption);
|
|
|
|
goToCell(u"A2:F17"_ustr);
|
|
|
|
dispatchCommand(mxComponent, u".uno:SortDescending"_ustr, {});
|
|
|
|
CPPUNIT_ASSERT_EQUAL(u"=SUM(A15:B15:C15:D15:E15:F15)"_ustr, pDoc->GetFormula(6, 3, 0));
|
|
|
|
// Without the fix in place, this test would have failed with
|
|
// - Expected: 10
|
|
// - Actual : 0
|
|
CPPUNIT_ASSERT_EQUAL(10.0, pDoc->GetValue(ScAddress(6, 3, 0)));
|
|
|
|
dispatchCommand(mxComponent, u".uno:Undo"_ustr, {});
|
|
|
|
CPPUNIT_ASSERT_EQUAL(u"=SUM(A4:B4:C4:D4:E4:F4)"_ustr, pDoc->GetFormula(6, 3, 0));
|
|
CPPUNIT_ASSERT_EQUAL(10.0, pDoc->GetValue(ScAddress(6, 3, 0)));
|
|
|
|
// Restore previous status
|
|
aInputOption.SetSortRefUpdate(bOldStatus);
|
|
pMod->SetInputOptions(aInputOption);
|
|
}
|
|
|
|
CPPUNIT_TEST_FIXTURE(ScUiCalcTest, testTdf97215)
|
|
{
|
|
createScDoc("tdf97215.ods");
|
|
ScDocument* pDoc = getScDoc();
|
|
|
|
// Enable sorting with update reference
|
|
ScModule* pMod = ScModule::get();
|
|
ScInputOptions aInputOption = pMod->GetInputOptions();
|
|
bool bOldStatus = aInputOption.GetSortRefUpdate();
|
|
aInputOption.SetSortRefUpdate(true);
|
|
pMod->SetInputOptions(aInputOption);
|
|
|
|
CPPUNIT_ASSERT_EQUAL(u"Inserted at bottom"_ustr, pDoc->GetString(ScAddress(0, 23, 0)));
|
|
|
|
goToCell(u"A1:M24"_ustr);
|
|
|
|
// Without the fix in place, this test would have hung here
|
|
dispatchCommand(mxComponent, u".uno:SortAscending"_ustr, {});
|
|
|
|
CPPUNIT_ASSERT_EQUAL(u"Inserted at bottom"_ustr, pDoc->GetString(ScAddress(0, 0, 0)));
|
|
|
|
dispatchCommand(mxComponent, u".uno:Undo"_ustr, {});
|
|
|
|
CPPUNIT_ASSERT_EQUAL(u"Inserted at bottom"_ustr, pDoc->GetString(ScAddress(0, 23, 0)));
|
|
|
|
// Restore previous status
|
|
aInputOption.SetSortRefUpdate(bOldStatus);
|
|
pMod->SetInputOptions(aInputOption);
|
|
}
|
|
|
|
CPPUNIT_TEST_FIXTURE(ScUiCalcTest, testTdf104026)
|
|
{
|
|
createScDoc("tdf104026.ods");
|
|
ScDocument* pDoc = getScDoc();
|
|
|
|
std::unordered_map<OUString, OUString> aExpectedValues
|
|
= { { "A2", "Cell value != $Sheet1.$B2" }, { "A3", "Cell value != $Sheet1.$B3" },
|
|
{ "A4", "Cell value != $Sheet1.$B4" }, { "A5", "Cell value != $Sheet1.$B5" },
|
|
{ "A6", "Cell value != $Sheet1.$B6" }, { "A7", "Cell value != $Sheet1.$B7" } };
|
|
|
|
lcl_AssertConditionalFormatList(*pDoc, 6, aExpectedValues);
|
|
|
|
goToCell(u"A2"_ustr);
|
|
dispatchCommand(mxComponent, u".uno:DeleteRows"_ustr, {});
|
|
|
|
// Without the fix in place, this test would have failed with
|
|
// - Expected: Cell value != $Sheet1.$B2
|
|
// - Actual : Cell value != $Sheet1.$B#REF!
|
|
lcl_AssertConditionalFormatList(*pDoc, 5, aExpectedValues);
|
|
|
|
dispatchCommand(mxComponent, u".uno:Undo"_ustr, {});
|
|
|
|
// tdf#140330: Without the fix in place, this test would have failed with
|
|
// - Expected: 6
|
|
// - Actual : 5
|
|
lcl_AssertConditionalFormatList(*pDoc, 6, aExpectedValues);
|
|
}
|
|
|
|
CPPUNIT_TEST_FIXTURE(ScUiCalcTest, testTdf92963)
|
|
{
|
|
createScDoc("tdf92963.ods");
|
|
ScDocument* pDoc = getScDoc();
|
|
|
|
// Disable replace cell warning
|
|
ScModule* pMod = ScModule::get();
|
|
ScInputOptions aInputOption = pMod->GetInputOptions();
|
|
bool bOldStatus = aInputOption.GetReplaceCellsWarn();
|
|
aInputOption.SetReplaceCellsWarn(false);
|
|
pMod->SetInputOptions(aInputOption);
|
|
|
|
std::unordered_map<OUString, OUString> aExpectedValues
|
|
= { { "C1", "Cell value > 14" }, { "C3", "Cell value > 14" }, { "C4", "Cell value > 14" } };
|
|
|
|
lcl_AssertConditionalFormatList(*pDoc, 3, aExpectedValues);
|
|
|
|
goToCell(u"A3:C4"_ustr);
|
|
|
|
dispatchCommand(mxComponent, u".uno:Copy"_ustr, {});
|
|
|
|
goToCell(u"A1:C1"_ustr);
|
|
|
|
dispatchCommand(mxComponent, u".uno:Paste"_ustr, {});
|
|
|
|
aExpectedValues = { { "C3,C1", "Cell value > 14" }, { "C4,C2", "Cell value > 14" } };
|
|
lcl_AssertConditionalFormatList(*pDoc, 2, aExpectedValues);
|
|
|
|
// Restore previous status
|
|
aInputOption.SetReplaceCellsWarn(bOldStatus);
|
|
pMod->SetInputOptions(aInputOption);
|
|
}
|
|
|
|
#if !defined(MACOSX) && !defined(_WIN32) //FIXME
|
|
CPPUNIT_TEST_FIXTURE(ScUiCalcTest, testTdf140151)
|
|
{
|
|
createScDoc("tdf140151.ods");
|
|
ScDocShell* pDocSh = getScDocShell();
|
|
|
|
// Focus is already on the button
|
|
ScModelObj* pModelObj = comphelper::getFromUnoTunnel<ScModelObj>(mxComponent);
|
|
pModelObj->postKeyEvent(LOK_KEYEVENT_KEYINPUT, 0, awt::Key::RETURN);
|
|
pModelObj->postKeyEvent(LOK_KEYEVENT_KEYUP, 0, awt::Key::RETURN);
|
|
Scheduler::ProcessEventsToIdle();
|
|
|
|
// Without the fix in place, the current cursor position wouldn't have changed
|
|
lcl_AssertCurrentCursorPosition(*pDocSh, u"B111");
|
|
}
|
|
#endif
|
|
|
|
CPPUNIT_TEST_FIXTURE(ScUiCalcTest, testTdf68290)
|
|
{
|
|
createScDoc("tdf68290.ods");
|
|
ScDocShell* pDocSh = getScDocShell();
|
|
|
|
const std::vector<OUString> aExpectedAddresses{ u"L3"_ustr, u"L6"_ustr, u"L9"_ustr,
|
|
u"L10"_ustr, u"L11"_ustr, u"L13"_ustr,
|
|
u"L15"_ustr };
|
|
|
|
ScModelObj* pModelObj = comphelper::getFromUnoTunnel<ScModelObj>(mxComponent);
|
|
for (const auto& rAddress : aExpectedAddresses)
|
|
{
|
|
lcl_AssertCurrentCursorPosition(*pDocSh, rAddress);
|
|
|
|
pModelObj->postKeyEvent(LOK_KEYEVENT_KEYINPUT, 0, awt::Key::RETURN);
|
|
Scheduler::ProcessEventsToIdle();
|
|
}
|
|
|
|
lcl_AssertCurrentCursorPosition(*pDocSh, u"M3");
|
|
}
|
|
|
|
CPPUNIT_TEST_FIXTURE(ScUiCalcTest, testTdf156462)
|
|
{
|
|
createScDoc("tdf156462.ods");
|
|
ScDocShell* pDocSh = getScDocShell();
|
|
|
|
lcl_AssertCurrentCursorPosition(*pDocSh, u"G2");
|
|
|
|
ScModelObj* pModelObj = comphelper::getFromUnoTunnel<ScModelObj>(mxComponent);
|
|
pModelObj->postKeyEvent(LOK_KEYEVENT_KEYINPUT, 0, KEY_MOD1 | KEY_LEFT);
|
|
Scheduler::ProcessEventsToIdle();
|
|
|
|
// Without the fix in place, the cursor would have jumped to cell C2
|
|
lcl_AssertCurrentCursorPosition(*pDocSh, u"D2");
|
|
}
|
|
|
|
CPPUNIT_TEST_FIXTURE(ScUiCalcTest, testTdf132057)
|
|
{
|
|
createScDoc("tdf132057.ods");
|
|
ScDocShell* pDocSh = getScDocShell();
|
|
|
|
lcl_AssertCurrentCursorPosition(*pDocSh, u"AU43");
|
|
|
|
ScModelObj* pModelObj = comphelper::getFromUnoTunnel<ScModelObj>(mxComponent);
|
|
pModelObj->postKeyEvent(LOK_KEYEVENT_KEYINPUT, 0, KEY_RETURN);
|
|
Scheduler::ProcessEventsToIdle();
|
|
|
|
// Without the fix in place, the cursor would have jumped to cell BM1
|
|
lcl_AssertCurrentCursorPosition(*pDocSh, u"G39");
|
|
}
|
|
|
|
CPPUNIT_TEST_FIXTURE(ScUiCalcTest, testTdf122232)
|
|
{
|
|
createScDoc("tdf122232.ods");
|
|
ScDocShell* pDocSh = getScDocShell();
|
|
|
|
//Start with from C6. Press tabulator to reach G6.
|
|
lcl_AssertCurrentCursorPosition(*pDocSh, u"C6");
|
|
|
|
ScModelObj* pModelObj = comphelper::getFromUnoTunnel<ScModelObj>(mxComponent);
|
|
pModelObj->postKeyEvent(LOK_KEYEVENT_KEYINPUT, 0, KEY_TAB);
|
|
pModelObj->postKeyEvent(LOK_KEYEVENT_KEYINPUT, 0, KEY_TAB);
|
|
Scheduler::ProcessEventsToIdle();
|
|
lcl_AssertCurrentCursorPosition(*pDocSh, u"G6");
|
|
|
|
//without the fix, cursor would jump to C29 instead of C7.
|
|
pModelObj->postKeyEvent(LOK_KEYEVENT_KEYINPUT, 0, awt::Key::RETURN);
|
|
Scheduler::ProcessEventsToIdle();
|
|
lcl_AssertCurrentCursorPosition(*pDocSh, u"C7");
|
|
}
|
|
|
|
CPPUNIT_TEST_FIXTURE(ScUiCalcTest, testTdf123052)
|
|
{
|
|
createScDoc("tdf123052.ods");
|
|
ScDocShell* pDocSh = getScDocShell();
|
|
|
|
std::vector<OUString> aExpectedAddresses{ u"F3"_ustr, u"D5"_ustr, u"E5"_ustr,
|
|
u"F6"_ustr, u"A8"_ustr, u"E9"_ustr };
|
|
|
|
ScModelObj* pModelObj = comphelper::getFromUnoTunnel<ScModelObj>(mxComponent);
|
|
for (const auto& rAddress : aExpectedAddresses)
|
|
{
|
|
pModelObj->postKeyEvent(LOK_KEYEVENT_KEYINPUT, 0, awt::Key::TAB);
|
|
pModelObj->postKeyEvent(LOK_KEYEVENT_KEYUP, 0, awt::Key::TAB);
|
|
Scheduler::ProcessEventsToIdle();
|
|
|
|
lcl_AssertCurrentCursorPosition(*pDocSh, rAddress);
|
|
}
|
|
|
|
aExpectedAddresses.pop_back();
|
|
|
|
for (std::vector<OUString>::reverse_iterator it = aExpectedAddresses.rbegin();
|
|
it != aExpectedAddresses.rend(); ++it)
|
|
{
|
|
pModelObj->postKeyEvent(LOK_KEYEVENT_KEYINPUT, 0, KEY_SHIFT | awt::Key::TAB);
|
|
pModelObj->postKeyEvent(LOK_KEYEVENT_KEYUP, 0, KEY_SHIFT | awt::Key::TAB);
|
|
Scheduler::ProcessEventsToIdle();
|
|
|
|
// Without the fix in place, this test would have failed here
|
|
lcl_AssertCurrentCursorPosition(*pDocSh, *it);
|
|
}
|
|
}
|
|
|
|
CPPUNIT_TEST_FIXTURE(ScUiCalcTest, testTdf120660)
|
|
{
|
|
createScDoc("tdf120660.ods");
|
|
ScDocument* pDoc = getScDoc();
|
|
|
|
// Disable replace cell warning
|
|
ScModule* pMod = ScModule::get();
|
|
ScInputOptions aInputOption = pMod->GetInputOptions();
|
|
bool bOldStatus = aInputOption.GetReplaceCellsWarn();
|
|
aInputOption.SetReplaceCellsWarn(false);
|
|
pMod->SetInputOptions(aInputOption);
|
|
|
|
goToCell(u"A8:E8"_ustr);
|
|
|
|
dispatchCommand(mxComponent, u".uno:Copy"_ustr, {});
|
|
|
|
goToCell(u"A4:E4"_ustr);
|
|
|
|
dispatchCommand(mxComponent, u".uno:Paste"_ustr, {});
|
|
|
|
CPPUNIT_ASSERT_EQUAL(1200.0, pDoc->GetValue(ScAddress(4, 3, 0)));
|
|
CPPUNIT_ASSERT_EQUAL(-100.0, pDoc->GetValue(ScAddress(4, 7, 0)));
|
|
|
|
dispatchCommand(mxComponent, u".uno:Undo"_ustr, {});
|
|
|
|
CPPUNIT_ASSERT_EQUAL(2200.0, pDoc->GetValue(ScAddress(4, 3, 0)));
|
|
CPPUNIT_ASSERT_EQUAL(900.0, pDoc->GetValue(ScAddress(4, 7, 0)));
|
|
|
|
goToCell(u"A8:D8"_ustr);
|
|
|
|
dispatchCommand(mxComponent, u".uno:Copy"_ustr, {});
|
|
|
|
goToCell(u"A4:D4"_ustr);
|
|
|
|
dispatchCommand(mxComponent, u".uno:Paste"_ustr, {});
|
|
|
|
CPPUNIT_ASSERT_EQUAL(1200.0, pDoc->GetValue(ScAddress(4, 3, 0)));
|
|
|
|
// Without the fix in place, this test would have failed with
|
|
// - Expected: -100
|
|
// - Actual : 900
|
|
CPPUNIT_ASSERT_EQUAL(-100.0, pDoc->GetValue(ScAddress(4, 7, 0)));
|
|
|
|
dispatchCommand(mxComponent, u".uno:Undo"_ustr, {});
|
|
|
|
CPPUNIT_ASSERT_EQUAL(2200.0, pDoc->GetValue(ScAddress(4, 3, 0)));
|
|
CPPUNIT_ASSERT_EQUAL(900.0, pDoc->GetValue(ScAddress(4, 7, 0)));
|
|
|
|
// Restore previous status
|
|
aInputOption.SetReplaceCellsWarn(bOldStatus);
|
|
pMod->SetInputOptions(aInputOption);
|
|
}
|
|
|
|
CPPUNIT_TEST_FIXTURE(ScUiCalcTest, testTdf146994)
|
|
{
|
|
createScDoc();
|
|
ScDocShell* pDocSh = getScDocShell();
|
|
|
|
goToCell(u"B3"_ustr);
|
|
lcl_AssertCurrentCursorPosition(*pDocSh, u"B3");
|
|
|
|
dispatchCommand(mxComponent, u".uno:Copy"_ustr, {});
|
|
|
|
ScModelObj* pModelObj = comphelper::getFromUnoTunnel<ScModelObj>(mxComponent);
|
|
pModelObj->postKeyEvent(LOK_KEYEVENT_KEYINPUT, 0, KEY_RIGHT);
|
|
pModelObj->postKeyEvent(LOK_KEYEVENT_KEYINPUT, 0, KEY_RIGHT);
|
|
Scheduler::ProcessEventsToIdle();
|
|
|
|
lcl_AssertCurrentCursorPosition(*pDocSh, u"D3");
|
|
|
|
dispatchCommand(mxComponent, u".uno:Paste"_ustr, {});
|
|
|
|
pModelObj->postKeyEvent(LOK_KEYEVENT_KEYINPUT, 0, KEY_SHIFT | KEY_DOWN);
|
|
Scheduler::ProcessEventsToIdle();
|
|
|
|
ScRangeList aMarkedArea = getViewShell()->GetViewData().GetMarkData().GetMarkedRanges();
|
|
OUString aMarkedAreaString;
|
|
ScDocument* pDoc = getScDoc();
|
|
ScRangeStringConverter::GetStringFromRangeList(aMarkedAreaString, &aMarkedArea, pDoc,
|
|
formula::FormulaGrammar::CONV_OOO);
|
|
|
|
// Without the fix in place, this test would have failed with
|
|
// - Expected: Sheet1.D3:Sheet1.D4
|
|
// - Actual : Sheet1.A2:Sheet1.D3
|
|
CPPUNIT_ASSERT_EQUAL(u"Sheet1.D3:Sheet1.D4"_ustr, aMarkedAreaString);
|
|
}
|
|
|
|
CPPUNIT_TEST_FIXTURE(ScUiCalcTest, testTdf157897_duplicated_print_ranges)
|
|
{
|
|
createScDoc("tdf157897_main.ods");
|
|
ScDocument* pDoc = getScDoc();
|
|
|
|
const sal_uInt16 nPos = 0;
|
|
const SCTAB nFirstTab = 0;
|
|
// Ensure that there exists a print range in the first documents tab
|
|
CPPUNIT_ASSERT_EQUAL(static_cast<sal_uInt16>(1), pDoc->GetPrintRangeCount(nFirstTab));
|
|
|
|
// Reload all links and check if the print range was not duplicated
|
|
const auto initialPrintRange = pDoc->GetPrintRange(nFirstTab, nPos);
|
|
pDoc->GetDocumentShell()->ReloadAllLinks();
|
|
|
|
// Without the fix in place, the print range in the linked tab will be duplicated
|
|
CPPUNIT_ASSERT_EQUAL(initialPrintRange, pDoc->GetPrintRange(nFirstTab, nPos));
|
|
}
|
|
|
|
CPPUNIT_TEST_FIXTURE(ScUiCalcTest, testTdf154991)
|
|
{
|
|
createScDoc("tdf154991.ods");
|
|
ScDocument* pDoc = getScDoc();
|
|
|
|
goToCell(u"A1"_ustr);
|
|
dispatchCommand(mxComponent, u".uno:SelectColumn"_ustr, {});
|
|
|
|
// Without the fix in place, this test would have crashed here
|
|
dispatchCommand(mxComponent, u".uno:HideColumn"_ustr, {});
|
|
CPPUNIT_ASSERT(pDoc->ColHidden(0, 0));
|
|
|
|
dispatchCommand(mxComponent, u".uno:Undo"_ustr, {});
|
|
CPPUNIT_ASSERT(!pDoc->ColHidden(0, 0));
|
|
}
|
|
|
|
CPPUNIT_TEST_FIXTURE(ScUiCalcTest, testTdf151752)
|
|
{
|
|
createScDoc();
|
|
ScDocument* pDoc = getScDoc();
|
|
|
|
insertStringToCell(u"A1"_ustr, u"1");
|
|
|
|
goToCell(u"A1"_ustr);
|
|
dispatchCommand(mxComponent, u".uno:SelectUnprotectedCells"_ustr, {});
|
|
|
|
dispatchCommand(mxComponent, u".uno:Copy"_ustr, {});
|
|
|
|
goToCell(u"B1"_ustr);
|
|
|
|
// Without the fix in place, this test would have crashed here
|
|
dispatchCommand(mxComponent, u".uno:Paste"_ustr, {});
|
|
|
|
CPPUNIT_ASSERT_EQUAL(1.0, pDoc->GetValue(0, 0, 0));
|
|
CPPUNIT_ASSERT_EQUAL(0.0, pDoc->GetValue(1, 0, 0));
|
|
}
|
|
|
|
CPPUNIT_TEST_FIXTURE(ScUiCalcTest, testTdf95306)
|
|
{
|
|
createScDoc();
|
|
ScDocument* pDoc = getScDoc();
|
|
|
|
// Use Adding Selection
|
|
dispatchCommand(mxComponent, u".uno:StatusSelectionModeExp"_ustr, {});
|
|
|
|
goToCell(u"B1"_ustr);
|
|
dispatchCommand(mxComponent, u".uno:SelectColumn"_ustr, {});
|
|
|
|
dispatchCommand(mxComponent, u".uno:GoRight"_ustr, {});
|
|
dispatchCommand(mxComponent, u".uno:GoRight"_ustr, {});
|
|
|
|
dispatchCommand(mxComponent, u".uno:SelectColumn"_ustr, {});
|
|
|
|
dispatchCommand(mxComponent, u".uno:HideColumn"_ustr, {});
|
|
|
|
CPPUNIT_ASSERT(!pDoc->ColHidden(0, 0));
|
|
CPPUNIT_ASSERT(pDoc->ColHidden(1, 0));
|
|
CPPUNIT_ASSERT(!pDoc->ColHidden(2, 0));
|
|
CPPUNIT_ASSERT(pDoc->ColHidden(3, 0));
|
|
CPPUNIT_ASSERT(!pDoc->ColHidden(4, 0));
|
|
|
|
dispatchCommand(mxComponent, u".uno:Undo"_ustr, {});
|
|
|
|
CPPUNIT_ASSERT(!pDoc->ColHidden(0, 0));
|
|
CPPUNIT_ASSERT(!pDoc->ColHidden(1, 0));
|
|
CPPUNIT_ASSERT(!pDoc->ColHidden(2, 0));
|
|
CPPUNIT_ASSERT(!pDoc->ColHidden(3, 0));
|
|
CPPUNIT_ASSERT(!pDoc->ColHidden(4, 0));
|
|
}
|
|
|
|
CPPUNIT_TEST_FIXTURE(ScUiCalcTest, testTdf102525)
|
|
{
|
|
createScDoc();
|
|
ScDocument* pDoc = getScDoc();
|
|
|
|
insertStringToCell(u"A1"_ustr, u"1");
|
|
insertStringToCell(u"A2"_ustr, u"2");
|
|
insertStringToCell(u"A3"_ustr, u"3");
|
|
insertStringToCell(u"A4"_ustr, u"4");
|
|
|
|
insertArrayToCell(u"B1"_ustr, u"=IF(A1:A4>2,1,2)");
|
|
goToCell(u"B1:B4"_ustr);
|
|
|
|
ScModelObj* pModelObj = comphelper::getFromUnoTunnel<ScModelObj>(mxComponent);
|
|
pModelObj->postKeyEvent(LOK_KEYEVENT_KEYINPUT, 0, KEY_F4);
|
|
Scheduler::ProcessEventsToIdle();
|
|
|
|
CPPUNIT_ASSERT_EQUAL(2.0, pDoc->GetValue(1, 0, 0));
|
|
CPPUNIT_ASSERT_EQUAL(2.0, pDoc->GetValue(1, 1, 0));
|
|
CPPUNIT_ASSERT_EQUAL(1.0, pDoc->GetValue(1, 2, 0));
|
|
CPPUNIT_ASSERT_EQUAL(1.0, pDoc->GetValue(1, 3, 0));
|
|
|
|
CPPUNIT_ASSERT_EQUAL(u"{=IF($A$1:$A$4>2,1,2)}"_ustr, pDoc->GetFormula(1, 0, 0));
|
|
|
|
dispatchCommand(mxComponent, u".uno:Undo"_ustr, {});
|
|
|
|
CPPUNIT_ASSERT_EQUAL(2.0, pDoc->GetValue(1, 0, 0));
|
|
CPPUNIT_ASSERT_EQUAL(2.0, pDoc->GetValue(1, 1, 0));
|
|
CPPUNIT_ASSERT_EQUAL(1.0, pDoc->GetValue(1, 2, 0));
|
|
CPPUNIT_ASSERT_EQUAL(1.0, pDoc->GetValue(1, 3, 0));
|
|
|
|
CPPUNIT_ASSERT_EQUAL(u"{=IF(A1:A4>2,1,2)}"_ustr, pDoc->GetFormula(1, 0, 0));
|
|
}
|
|
|
|
CPPUNIT_TEST_FIXTURE(ScUiCalcTest, testTdf39650)
|
|
{
|
|
createScDoc();
|
|
ScDocument* pDoc = getScDoc();
|
|
|
|
FormulaGrammarSwitch aFGSwitch(pDoc, formula::FormulaGrammar::GRAM_ENGLISH_XL_R1C1);
|
|
|
|
insertStringToCell(u"R3C3"_ustr, u"xxx");
|
|
insertStringToCell(u"R2C2"_ustr, u"=R[1]C[1]");
|
|
|
|
CPPUNIT_ASSERT_EQUAL(u"=R[1]C[1]"_ustr, pDoc->GetFormula(1, 1, 0));
|
|
CPPUNIT_ASSERT_EQUAL(u"xxx"_ustr, pDoc->GetString(1, 1, 0));
|
|
|
|
goToCell(u"B2"_ustr);
|
|
|
|
ScModelObj* pModelObj = comphelper::getFromUnoTunnel<ScModelObj>(mxComponent);
|
|
pModelObj->postKeyEvent(LOK_KEYEVENT_KEYINPUT, 0, KEY_F4);
|
|
Scheduler::ProcessEventsToIdle();
|
|
|
|
CPPUNIT_ASSERT_EQUAL(u"=R3C3"_ustr, pDoc->GetFormula(1, 1, 0));
|
|
CPPUNIT_ASSERT_EQUAL(u"xxx"_ustr, pDoc->GetString(1, 1, 0));
|
|
}
|
|
|
|
CPPUNIT_TEST_FIXTURE(ScUiCalcTest, testTdf45020)
|
|
{
|
|
createScDoc();
|
|
ScDocument* pDoc = getScDoc();
|
|
|
|
goToCell(u"A2:A3"_ustr);
|
|
|
|
dispatchCommand(mxComponent, u".uno:HideRow"_ustr, {});
|
|
|
|
goToCell(u"A1"_ustr);
|
|
|
|
ScModelObj* pModelObj = comphelper::getFromUnoTunnel<ScModelObj>(mxComponent);
|
|
pModelObj->postKeyEvent(LOK_KEYEVENT_KEYINPUT, 0, KEY_SHIFT | KEY_DOWN);
|
|
Scheduler::ProcessEventsToIdle();
|
|
|
|
ScRangeList aMarkedArea = getViewShell()->GetViewData().GetMarkData().GetMarkedRanges();
|
|
OUString aMarkedAreaString;
|
|
ScRangeStringConverter::GetStringFromRangeList(aMarkedAreaString, &aMarkedArea, pDoc,
|
|
formula::FormulaGrammar::CONV_OOO);
|
|
|
|
// Without the fix in place, this test would have failed with
|
|
// - Expected: Sheet1.A1:Sheet1.A4
|
|
// - Actual : Sheet1.A1:Sheet1.A2
|
|
CPPUNIT_ASSERT_EQUAL(u"Sheet1.A1:Sheet1.A4"_ustr, aMarkedAreaString);
|
|
}
|
|
|
|
CPPUNIT_TEST_FIXTURE(ScUiCalcTest, testTdf117706)
|
|
{
|
|
createScDoc();
|
|
ScDocShell* pDocSh = getScDocShell();
|
|
|
|
insertStringToCell(u"A1"_ustr, u"A1");
|
|
insertStringToCell(u"A3"_ustr, u"A3");
|
|
|
|
// Use Adding Selection
|
|
dispatchCommand(mxComponent, u".uno:StatusSelectionModeExp"_ustr, {});
|
|
|
|
goToCell(u"A1"_ustr);
|
|
dispatchCommand(mxComponent, u".uno:SelectRow"_ustr, {});
|
|
|
|
dispatchCommand(mxComponent, u".uno:GoDown"_ustr, {});
|
|
dispatchCommand(mxComponent, u".uno:GoDown"_ustr, {});
|
|
lcl_AssertCurrentCursorPosition(*pDocSh, u"A3");
|
|
|
|
dispatchCommand(mxComponent, u".uno:SelectRow"_ustr, {});
|
|
|
|
dispatchCommand(mxComponent, u".uno:Copy"_ustr, {});
|
|
|
|
// Open a new document
|
|
createScDoc();
|
|
ScDocument* pDoc = getScDoc();
|
|
|
|
dispatchCommand(mxComponent, u".uno:Paste"_ustr, {});
|
|
|
|
// Without the fix in place, this test would have failed with
|
|
// - Expected: A1
|
|
// - Actual : A3
|
|
CPPUNIT_ASSERT_EQUAL(u"A1"_ustr, pDoc->GetString(ScAddress(0, 0, 0)));
|
|
CPPUNIT_ASSERT_EQUAL(u"A3"_ustr, pDoc->GetString(ScAddress(0, 1, 0)));
|
|
CPPUNIT_ASSERT_EQUAL(u""_ustr, pDoc->GetString(ScAddress(0, 2, 0)));
|
|
}
|
|
|
|
CPPUNIT_TEST_FIXTURE(ScUiCalcTest, testTdf159373)
|
|
{
|
|
createScDoc("tdf159373.ods");
|
|
ScDocument* pDoc = getScDoc();
|
|
|
|
CPPUNIT_ASSERT_EQUAL(static_cast<SCTAB>(2), pDoc->GetTableCount());
|
|
|
|
uno::Sequence<beans::PropertyValue> aArgs(
|
|
comphelper::InitPropertySequence({ { "Index", uno::Any(sal_uInt16(0)) } }));
|
|
|
|
// Without the fix in place, this test would have crashed here
|
|
dispatchCommand(mxComponent, u".uno:Remove"_ustr, aArgs);
|
|
|
|
CPPUNIT_ASSERT_EQUAL(static_cast<SCTAB>(1), pDoc->GetTableCount());
|
|
|
|
dispatchCommand(mxComponent, u".uno:Undo"_ustr, aArgs);
|
|
|
|
CPPUNIT_ASSERT_EQUAL(static_cast<SCTAB>(2), pDoc->GetTableCount());
|
|
}
|
|
|
|
CPPUNIT_TEST_FIXTURE(ScUiCalcTest, testTdf86166)
|
|
{
|
|
createScDoc("tdf86166.ods");
|
|
ScDocument* pDoc = getScDoc();
|
|
|
|
CPPUNIT_ASSERT_EQUAL(static_cast<SCTAB>(2), pDoc->GetTableCount());
|
|
|
|
uno::Sequence<beans::PropertyValue> aArgs(
|
|
comphelper::InitPropertySequence({ { "Index", uno::Any(sal_uInt16(0)) } }));
|
|
|
|
// Without the fix in place, this test would have crashed here
|
|
dispatchCommand(mxComponent, u".uno:Remove"_ustr, aArgs);
|
|
|
|
CPPUNIT_ASSERT_EQUAL(static_cast<SCTAB>(1), pDoc->GetTableCount());
|
|
}
|
|
|
|
CPPUNIT_TEST_FIXTURE(ScUiCalcTest, testTdf158802)
|
|
{
|
|
createScDoc("tdf158802.xlsx");
|
|
ScDocument* pDoc = getScDoc();
|
|
|
|
CPPUNIT_ASSERT_EQUAL(static_cast<SCTAB>(2), pDoc->GetTableCount());
|
|
|
|
uno::Sequence<beans::PropertyValue> aArgs(
|
|
comphelper::InitPropertySequence({ { "Index", uno::Any(sal_uInt16(0)) } }));
|
|
|
|
dispatchCommand(mxComponent, u".uno:Remove"_ustr, aArgs);
|
|
|
|
CPPUNIT_ASSERT_EQUAL(static_cast<SCTAB>(1), pDoc->GetTableCount());
|
|
|
|
// Without the fix in place, this test would have crashed here
|
|
dispatchCommand(mxComponent, u".uno:Undo"_ustr, aArgs);
|
|
|
|
CPPUNIT_ASSERT_EQUAL(static_cast<SCTAB>(2), pDoc->GetTableCount());
|
|
}
|
|
|
|
CPPUNIT_TEST_FIXTURE(ScUiCalcTest, testTdf149502_HangOnDeletingSheet1)
|
|
{
|
|
createScDoc("tdf149502_HangOnDeletingSheet1.ods");
|
|
ScDocument* pDoc = getScDoc();
|
|
|
|
CPPUNIT_ASSERT_EQUAL(static_cast<SCTAB>(4), pDoc->GetTableCount());
|
|
|
|
uno::Sequence<beans::PropertyValue> aArgs(
|
|
comphelper::InitPropertySequence({ { "Index", uno::Any(sal_uInt16(0)) } }));
|
|
|
|
// Before the fix in place, this test frozen here
|
|
dispatchCommand(mxComponent, u".uno:Remove"_ustr, aArgs);
|
|
|
|
CPPUNIT_ASSERT_EQUAL(static_cast<SCTAB>(3), pDoc->GetTableCount());
|
|
}
|
|
|
|
CPPUNIT_TEST_FIXTURE(ScUiCalcTest, testTdf149503)
|
|
{
|
|
createScDoc("tdf149503.xls");
|
|
ScDocument* pDoc = getScDoc();
|
|
|
|
dispatchCommand(mxComponent, u".uno:SelectAll"_ustr, {});
|
|
|
|
dispatchCommand(mxComponent, u".uno:Cut"_ustr, {});
|
|
|
|
// Without the fix in place, this test would have crashed here
|
|
dispatchCommand(mxComponent, u".uno:Paste"_ustr, {});
|
|
|
|
ScDPCollection* pDPs = pDoc->GetDPCollection();
|
|
CPPUNIT_ASSERT_EQUAL(size_t(1), pDPs->GetCount());
|
|
}
|
|
|
|
CPPUNIT_TEST_FIXTURE(ScUiCalcTest, testTdf108292)
|
|
{
|
|
createScDoc("tdf108292.ods");
|
|
ScDocument* pDoc = getScDoc();
|
|
|
|
dispatchCommand(mxComponent, u".uno:SelectAll"_ustr, {});
|
|
|
|
dispatchCommand(mxComponent, u".uno:Copy"_ustr, {});
|
|
|
|
// Open a new document
|
|
createScDoc();
|
|
pDoc = getScDoc();
|
|
|
|
// Without the fix in place, this test would have crashed
|
|
dispatchCommand(mxComponent, u".uno:Paste"_ustr, {});
|
|
|
|
CPPUNIT_ASSERT_EQUAL(u"2D"_ustr, pDoc->GetString(ScAddress(26, 0, 0)));
|
|
}
|
|
|
|
// Inspired from testTdf117706, test columns instead of rows
|
|
CPPUNIT_TEST_FIXTURE(ScUiCalcTest, testMultiRangeCol)
|
|
{
|
|
createScDoc();
|
|
ScDocShell* pDocSh = getScDocShell();
|
|
|
|
insertStringToCell(u"A1"_ustr, u"A1");
|
|
insertStringToCell(u"C1"_ustr, u"C1");
|
|
|
|
// Use Adding Selection
|
|
dispatchCommand(mxComponent, u".uno:StatusSelectionModeExp"_ustr, {});
|
|
|
|
goToCell(u"A1"_ustr);
|
|
dispatchCommand(mxComponent, u".uno:SelectColumn"_ustr, {});
|
|
|
|
dispatchCommand(mxComponent, u".uno:GoRight"_ustr, {});
|
|
dispatchCommand(mxComponent, u".uno:GoRight"_ustr, {});
|
|
lcl_AssertCurrentCursorPosition(*pDocSh, u"C1");
|
|
|
|
dispatchCommand(mxComponent, u".uno:SelectColumn"_ustr, {});
|
|
|
|
dispatchCommand(mxComponent, u".uno:Copy"_ustr, {});
|
|
|
|
// Open a new document
|
|
createScDoc();
|
|
ScDocument* pDoc = getScDoc();
|
|
|
|
dispatchCommand(mxComponent, u".uno:Paste"_ustr, {});
|
|
|
|
CPPUNIT_ASSERT_EQUAL(u"A1"_ustr, pDoc->GetString(ScAddress(0, 0, 0)));
|
|
CPPUNIT_ASSERT_EQUAL(u"C1"_ustr, pDoc->GetString(ScAddress(1, 0, 0)));
|
|
CPPUNIT_ASSERT_EQUAL(u""_ustr, pDoc->GetString(ScAddress(2, 0, 0)));
|
|
}
|
|
|
|
// Test the call of .uno:PasteTransposed (tdf#102255)
|
|
// Note: the transpose functionality is tested in ucalc
|
|
CPPUNIT_TEST_FIXTURE(ScUiCalcTest, testPasteTransposed)
|
|
{
|
|
createScDoc();
|
|
ScDocument* pDoc = getScDoc();
|
|
|
|
insertStringToCell(u"A1"_ustr, u"1");
|
|
insertStringToCell(u"A2"_ustr, u"a");
|
|
insertStringToCell(u"A3"_ustr, u"=A1");
|
|
|
|
// Add a note to A1
|
|
goToCell(u"A1"_ustr);
|
|
uno::Sequence<beans::PropertyValue> aArgs
|
|
= comphelper::InitPropertySequence({ { "Text", uno::Any(u"Note in A1"_ustr) } });
|
|
dispatchCommand(mxComponent, u".uno:InsertAnnotation"_ustr, aArgs);
|
|
|
|
// Set A2 bold
|
|
goToCell(u"A2"_ustr);
|
|
dispatchCommand(mxComponent, u".uno:Bold"_ustr, {});
|
|
|
|
// Check preconditions
|
|
CPPUNIT_ASSERT_MESSAGE("There should be a note on A1", pDoc->HasNote(ScAddress(0, 0, 0)));
|
|
const ScPatternAttr* pPattern = pDoc->GetPattern(0, 1, 0);
|
|
vcl::Font aFont;
|
|
pPattern->fillFontOnly(aFont);
|
|
CPPUNIT_ASSERT_EQUAL_MESSAGE("font should be bold", WEIGHT_BOLD, aFont.GetWeight());
|
|
|
|
goToCell(u"A1:A3"_ustr);
|
|
|
|
dispatchCommand(mxComponent, u".uno:Copy"_ustr, {});
|
|
|
|
// Open a new document
|
|
createScDoc();
|
|
pDoc = getScDoc();
|
|
|
|
dispatchCommand(mxComponent, u".uno:PasteTransposed"_ustr, {});
|
|
|
|
OUString aFormula;
|
|
CPPUNIT_ASSERT_EQUAL(u"1"_ustr, pDoc->GetString(0, 0, 0)); // A1
|
|
CPPUNIT_ASSERT_EQUAL(1.0, pDoc->GetValue(0, 0, 0)); // A1
|
|
CPPUNIT_ASSERT_EQUAL(u"a"_ustr, pDoc->GetString(1, 0, 0)); // B1
|
|
aFormula = pDoc->GetFormula(2, 0, 0); // C1
|
|
CPPUNIT_ASSERT_EQUAL(u"=A1"_ustr, aFormula); // C1
|
|
CPPUNIT_ASSERT_EQUAL(u"1"_ustr, pDoc->GetString(2, 0, 0)); // C1
|
|
CPPUNIT_ASSERT_EQUAL(1.0, pDoc->GetValue(2, 0, 0)); // C1
|
|
|
|
CPPUNIT_ASSERT_MESSAGE("There should be a note on A1", pDoc->HasNote(ScAddress(0, 0, 0)));
|
|
CPPUNIT_ASSERT_EQUAL(u"Note in A1"_ustr, pDoc->GetNote(ScAddress(0, 0, 0))->GetText());
|
|
|
|
pPattern = pDoc->GetPattern(1, 0, 0);
|
|
pPattern->fillFontOnly(aFont);
|
|
CPPUNIT_ASSERT_EQUAL_MESSAGE("font should be bold", WEIGHT_BOLD, aFont.GetWeight());
|
|
}
|
|
|
|
// Test the call of .uno:PasteAsLink (tdf#90101)
|
|
// Note: the paste as link functionality is tested in ucalc
|
|
CPPUNIT_TEST_FIXTURE(ScUiCalcTest, testPasteAsLink)
|
|
{
|
|
createScDoc();
|
|
ScDocument* pDoc = getScDoc();
|
|
|
|
insertStringToCell(u"A1"_ustr, u"1");
|
|
insertStringToCell(u"A2"_ustr, u"a");
|
|
insertStringToCell(u"A3"_ustr, u"=A1");
|
|
|
|
// Add a note to A1
|
|
goToCell(u"A1"_ustr);
|
|
uno::Sequence<beans::PropertyValue> aArgs
|
|
= comphelper::InitPropertySequence({ { "Text", uno::Any(u"Note in A1"_ustr) } });
|
|
dispatchCommand(mxComponent, u".uno:InsertAnnotation"_ustr, aArgs);
|
|
|
|
// Set A2 bold
|
|
goToCell(u"A2"_ustr);
|
|
dispatchCommand(mxComponent, u".uno:Bold"_ustr, {});
|
|
|
|
// Check preconditions
|
|
CPPUNIT_ASSERT_MESSAGE("There should be a note on A1", pDoc->HasNote(ScAddress(0, 0, 0)));
|
|
const ScPatternAttr* pPattern = pDoc->GetPattern(0, 1, 0);
|
|
vcl::Font aFont;
|
|
pPattern->fillFontOnly(aFont);
|
|
CPPUNIT_ASSERT_EQUAL_MESSAGE("font should be bold", WEIGHT_BOLD, aFont.GetWeight());
|
|
|
|
goToCell(u"A1:A3"_ustr);
|
|
|
|
dispatchCommand(mxComponent, u".uno:Copy"_ustr, {});
|
|
|
|
goToCell(u"C1"_ustr);
|
|
|
|
dispatchCommand(mxComponent, u".uno:PasteAsLink"_ustr, {});
|
|
|
|
OUString aFormula = pDoc->GetFormula(2, 0, 0);
|
|
CPPUNIT_ASSERT_EQUAL(u"=$Sheet1.$A$1"_ustr, aFormula); // C1
|
|
aFormula = pDoc->GetFormula(2, 1, 0);
|
|
CPPUNIT_ASSERT_EQUAL(u"=$Sheet1.$A$2"_ustr, aFormula); // C2
|
|
aFormula = pDoc->GetFormula(2, 2, 0);
|
|
CPPUNIT_ASSERT_EQUAL(u"=$Sheet1.$A$3"_ustr, aFormula); // C3
|
|
CPPUNIT_ASSERT_EQUAL(1.0, pDoc->GetValue(2, 0, 0)); // C1
|
|
CPPUNIT_ASSERT_EQUAL(1.0, pDoc->GetValue(2, 2, 0)); // C3
|
|
|
|
CPPUNIT_ASSERT_MESSAGE("There should be no note on C1", !pDoc->HasNote(ScAddress(2, 0, 0)));
|
|
|
|
pPattern = pDoc->GetPattern(2, 1, 0);
|
|
pPattern->fillFontOnly(aFont);
|
|
CPPUNIT_ASSERT_EQUAL_MESSAGE("font should be normal (cell attributes should not be copied)",
|
|
WEIGHT_NORMAL, aFont.GetWeight());
|
|
}
|
|
|
|
CPPUNIT_TEST_FIXTURE(ScUiCalcTest, testTdf119659)
|
|
{
|
|
createScDoc();
|
|
ScDocument* pDoc = getScDoc();
|
|
|
|
insertArrayToCell(u"A1:C1"_ustr, u"={1,2,3}");
|
|
|
|
insertStringToCell(u"A2"_ustr, u"=LOOKUP(3; A1:C1; {1,2})");
|
|
|
|
// Without the fix in place, this test would have crashed here
|
|
CPPUNIT_ASSERT_EQUAL(u"#N/A"_ustr, pDoc->GetString(ScAddress(0, 1, 0)));
|
|
}
|
|
|
|
CPPUNIT_TEST_FIXTURE(ScUiCalcTest, testTdf131442)
|
|
{
|
|
createScDoc();
|
|
ScDocument* pDoc = getScDoc();
|
|
|
|
insertArrayToCell(u"A1:A5"_ustr, u"={6;4;2;5;3}");
|
|
|
|
CPPUNIT_ASSERT_EQUAL(u"6"_ustr, pDoc->GetString(ScAddress(0, 0, 0)));
|
|
CPPUNIT_ASSERT_EQUAL(u"4"_ustr, pDoc->GetString(ScAddress(0, 1, 0)));
|
|
CPPUNIT_ASSERT_EQUAL(u"2"_ustr, pDoc->GetString(ScAddress(0, 2, 0)));
|
|
CPPUNIT_ASSERT_EQUAL(u"5"_ustr, pDoc->GetString(ScAddress(0, 3, 0)));
|
|
CPPUNIT_ASSERT_EQUAL(u"3"_ustr, pDoc->GetString(ScAddress(0, 4, 0)));
|
|
|
|
dispatchCommand(mxComponent, u".uno:SortAscending"_ustr, {});
|
|
|
|
// Without the fix in place, this test would have failed with
|
|
// - Expected: 6
|
|
// - Actual : #REF!
|
|
CPPUNIT_ASSERT_EQUAL(u"6"_ustr, pDoc->GetString(ScAddress(0, 0, 0)));
|
|
CPPUNIT_ASSERT_EQUAL(u"4"_ustr, pDoc->GetString(ScAddress(0, 1, 0)));
|
|
CPPUNIT_ASSERT_EQUAL(u"2"_ustr, pDoc->GetString(ScAddress(0, 2, 0)));
|
|
CPPUNIT_ASSERT_EQUAL(u"5"_ustr, pDoc->GetString(ScAddress(0, 3, 0)));
|
|
CPPUNIT_ASSERT_EQUAL(u"3"_ustr, pDoc->GetString(ScAddress(0, 4, 0)));
|
|
|
|
dispatchCommand(mxComponent, u".uno:SortDescending"_ustr, {});
|
|
|
|
CPPUNIT_ASSERT_EQUAL(u"6"_ustr, pDoc->GetString(ScAddress(0, 0, 0)));
|
|
CPPUNIT_ASSERT_EQUAL(u"4"_ustr, pDoc->GetString(ScAddress(0, 1, 0)));
|
|
CPPUNIT_ASSERT_EQUAL(u"2"_ustr, pDoc->GetString(ScAddress(0, 2, 0)));
|
|
CPPUNIT_ASSERT_EQUAL(u"5"_ustr, pDoc->GetString(ScAddress(0, 3, 0)));
|
|
CPPUNIT_ASSERT_EQUAL(u"3"_ustr, pDoc->GetString(ScAddress(0, 4, 0)));
|
|
}
|
|
|
|
CPPUNIT_TEST_FIXTURE(ScUiCalcTest, testTdf117458)
|
|
{
|
|
createScDoc();
|
|
ScDocShell* pDocSh = getScDocShell();
|
|
|
|
ScModule* pMod = ScModule::get();
|
|
ScInputOptions aInputOption = pMod->GetInputOptions();
|
|
sal_uInt16 bOldStatus = aInputOption.GetMoveDir();
|
|
|
|
lcl_AssertCurrentCursorPosition(*pDocSh, u"A1");
|
|
|
|
aInputOption.SetMoveDir(DIR_BOTTOM);
|
|
pMod->SetInputOptions(aInputOption);
|
|
|
|
ScModelObj* pModelObj = comphelper::getFromUnoTunnel<ScModelObj>(mxComponent);
|
|
pModelObj->postKeyEvent(LOK_KEYEVENT_KEYINPUT, 0, awt::Key::RETURN);
|
|
Scheduler::ProcessEventsToIdle();
|
|
|
|
lcl_AssertCurrentCursorPosition(*pDocSh, u"A2");
|
|
|
|
aInputOption.SetMoveDir(DIR_TOP);
|
|
pMod->SetInputOptions(aInputOption);
|
|
|
|
pModelObj->postKeyEvent(LOK_KEYEVENT_KEYINPUT, 0, awt::Key::RETURN);
|
|
Scheduler::ProcessEventsToIdle();
|
|
|
|
lcl_AssertCurrentCursorPosition(*pDocSh, u"A1");
|
|
|
|
aInputOption.SetMoveDir(DIR_RIGHT);
|
|
pMod->SetInputOptions(aInputOption);
|
|
|
|
pModelObj->postKeyEvent(LOK_KEYEVENT_KEYINPUT, 0, awt::Key::RETURN);
|
|
Scheduler::ProcessEventsToIdle();
|
|
|
|
lcl_AssertCurrentCursorPosition(*pDocSh, u"B1");
|
|
|
|
aInputOption.SetMoveDir(DIR_LEFT);
|
|
pMod->SetInputOptions(aInputOption);
|
|
|
|
pModelObj->postKeyEvent(LOK_KEYEVENT_KEYINPUT, 0, awt::Key::RETURN);
|
|
Scheduler::ProcessEventsToIdle();
|
|
|
|
lcl_AssertCurrentCursorPosition(*pDocSh, u"A1");
|
|
|
|
// Restore previous status
|
|
aInputOption.SetMoveDir(bOldStatus);
|
|
pMod->SetInputOptions(aInputOption);
|
|
}
|
|
|
|
CPPUNIT_TEST_FIXTURE(ScUiCalcTest, testTdf90694)
|
|
{
|
|
createScDoc("tdf90694.ods");
|
|
ScDocument* pDoc = getScDoc();
|
|
|
|
// Select row 30 to 60
|
|
goToCell(u"30:60"_ustr);
|
|
|
|
// Without the fix in place, this test would have crashed here
|
|
dispatchCommand(mxComponent, u".uno:DeleteRows"_ustr, {});
|
|
|
|
CPPUNIT_ASSERT_EQUAL(u""_ustr, pDoc->GetString(ScAddress(0, 29, 0)));
|
|
CPPUNIT_ASSERT_EQUAL(u""_ustr, pDoc->GetString(ScAddress(0, 59, 0)));
|
|
|
|
dispatchCommand(mxComponent, u".uno:Undo"_ustr, {});
|
|
|
|
CPPUNIT_ASSERT_EQUAL(u"#REF!"_ustr, pDoc->GetString(ScAddress(0, 29, 0)));
|
|
CPPUNIT_ASSERT_EQUAL(u"#REF!"_ustr, pDoc->GetString(ScAddress(0, 59, 0)));
|
|
}
|
|
|
|
CPPUNIT_TEST_FIXTURE(ScUiCalcTest, testTdf138710)
|
|
{
|
|
createScDoc("tdf138710.ods");
|
|
ScDocument* pDoc = getScDoc();
|
|
|
|
dispatchCommand(mxComponent, u".uno:SelectAll"_ustr, {});
|
|
|
|
// Without the fix in place, this test would have crashed here
|
|
dispatchCommand(mxComponent, u".uno:DeleteRows"_ustr, {});
|
|
|
|
CPPUNIT_ASSERT_EQUAL(u""_ustr, pDoc->GetString(ScAddress(0, 0, 1)));
|
|
|
|
dispatchCommand(mxComponent, u".uno:Undo"_ustr, {});
|
|
|
|
CPPUNIT_ASSERT_EQUAL(u"Total"_ustr, pDoc->GetString(ScAddress(0, 0, 1)));
|
|
|
|
dispatchCommand(mxComponent, u".uno:DeleteRows"_ustr, {});
|
|
|
|
CPPUNIT_ASSERT_EQUAL(u""_ustr, pDoc->GetString(ScAddress(0, 0, 1)));
|
|
|
|
dispatchCommand(mxComponent, u".uno:Undo"_ustr, {});
|
|
|
|
CPPUNIT_ASSERT_EQUAL(u"Total"_ustr, pDoc->GetString(ScAddress(0, 0, 1)));
|
|
}
|
|
|
|
CPPUNIT_TEST_FIXTURE(ScUiCalcTest, testTdf128914)
|
|
{
|
|
createScDoc("tdf128914.ods");
|
|
ScDocument* pDoc = getScDoc();
|
|
|
|
CPPUNIT_ASSERT_EQUAL(6.0, pDoc->GetValue(ScAddress(3, 1, 0)));
|
|
|
|
goToCell(u"D2"_ustr);
|
|
|
|
dispatchCommand(mxComponent, u".uno:Copy"_ustr, {});
|
|
|
|
goToCell(u"D3:D6"_ustr);
|
|
|
|
dispatchCommand(mxComponent, u".uno:Paste"_ustr, {});
|
|
|
|
// Without the fix in place, this test would have failed with
|
|
// - Expected: 24
|
|
// - Actual : 6
|
|
CPPUNIT_ASSERT_EQUAL(24.0, pDoc->GetValue(ScAddress(3, 2, 0)));
|
|
CPPUNIT_ASSERT_EQUAL(60.0, pDoc->GetValue(ScAddress(3, 3, 0)));
|
|
CPPUNIT_ASSERT_EQUAL(120.0, pDoc->GetValue(ScAddress(3, 4, 0)));
|
|
CPPUNIT_ASSERT_EQUAL(210.0, pDoc->GetValue(ScAddress(3, 5, 0)));
|
|
|
|
CPPUNIT_ASSERT_EQUAL(6.0, pDoc->GetValue(ScAddress(1, 14, 0)));
|
|
|
|
goToCell(u"B15"_ustr);
|
|
|
|
dispatchCommand(mxComponent, u".uno:Copy"_ustr, {});
|
|
|
|
goToCell(u"C15:F15"_ustr);
|
|
|
|
dispatchCommand(mxComponent, u".uno:Paste"_ustr, {});
|
|
|
|
CPPUNIT_ASSERT_EQUAL(24.0, pDoc->GetValue(ScAddress(2, 14, 0)));
|
|
CPPUNIT_ASSERT_EQUAL(60.0, pDoc->GetValue(ScAddress(3, 14, 0)));
|
|
CPPUNIT_ASSERT_EQUAL(120.0, pDoc->GetValue(ScAddress(4, 14, 0)));
|
|
CPPUNIT_ASSERT_EQUAL(210.0, pDoc->GetValue(ScAddress(5, 14, 0)));
|
|
}
|
|
|
|
CPPUNIT_TEST_FIXTURE(ScUiCalcTest, testTdf108654)
|
|
{
|
|
createScDoc("tdf108654.ods");
|
|
ScDocument* pDoc = getScDoc();
|
|
|
|
dispatchCommand(mxComponent, u".uno:SelectAll"_ustr, {});
|
|
// first .uno:SelectAll selects the range, second all (tdf#161641)
|
|
dispatchCommand(mxComponent, u".uno:SelectAll"_ustr, {});
|
|
|
|
dispatchCommand(mxComponent, u".uno:Copy"_ustr, {});
|
|
|
|
insertNewSheet(*pDoc);
|
|
|
|
dispatchCommand(mxComponent, u".uno:Paste"_ustr, {});
|
|
|
|
OUString aFormula = pDoc->GetFormula(3, 126, 1);
|
|
CPPUNIT_ASSERT_EQUAL(u"=VLOOKUP(C127,#REF!,D$1,0)"_ustr, aFormula);
|
|
|
|
dispatchCommand(mxComponent, u".uno:Undo"_ustr, {});
|
|
|
|
aFormula = pDoc->GetFormula(3, 126, 1);
|
|
CPPUNIT_ASSERT_EQUAL(u""_ustr, aFormula);
|
|
CPPUNIT_ASSERT_EQUAL(static_cast<SCTAB>(2), pDoc->GetTableCount());
|
|
|
|
dispatchCommand(mxComponent, u".uno:Undo"_ustr, {});
|
|
|
|
CPPUNIT_ASSERT_EQUAL(static_cast<SCTAB>(1), pDoc->GetTableCount());
|
|
}
|
|
|
|
CPPUNIT_TEST_FIXTURE(ScUiCalcTest, testTdf150219)
|
|
{
|
|
createScDoc();
|
|
ScDocument* pDoc = getScDoc();
|
|
|
|
insertNewSheet(*pDoc);
|
|
|
|
insertStringToCell(u"A1"_ustr, u"=$Sheet1.A1");
|
|
goToCell(u"A1"_ustr);
|
|
|
|
CPPUNIT_ASSERT_EQUAL(u"0"_ustr, pDoc->GetString(ScAddress(0, 0, 1)));
|
|
|
|
dispatchCommand(mxComponent, u".uno:ShowPrecedents"_ustr, {});
|
|
|
|
// Without the fix in place, this test would have crashed here
|
|
dispatchCommand(mxComponent, u".uno:Cut"_ustr, {});
|
|
|
|
CPPUNIT_ASSERT_EQUAL(u""_ustr, pDoc->GetString(ScAddress(0, 0, 1)));
|
|
}
|
|
|
|
CPPUNIT_TEST_FIXTURE(ScUiCalcTest, testTdf153790)
|
|
{
|
|
createScDoc();
|
|
ScDocument* pDoc = getScDoc();
|
|
|
|
insertStringToCell(u"A1"_ustr, u"=SUM($Sheet1.B1:C1)");
|
|
|
|
CPPUNIT_ASSERT_EQUAL(u"0"_ustr, pDoc->GetString(ScAddress(0, 0, 0)));
|
|
|
|
goToCell(u"A1"_ustr);
|
|
dispatchCommand(mxComponent, u".uno:Copy"_ustr, {});
|
|
goToCell(u"A2"_ustr);
|
|
dispatchCommand(mxComponent, u".uno:Paste"_ustr, {});
|
|
|
|
CPPUNIT_ASSERT_EQUAL(u"=SUM($Sheet1.B2:C2)"_ustr, pDoc->GetFormula(0, 1, 0));
|
|
|
|
goToCell(u"A1"_ustr);
|
|
dispatchCommand(mxComponent, u".uno:Cut"_ustr, {});
|
|
goToCell(u"A3"_ustr);
|
|
dispatchCommand(mxComponent, u".uno:Paste"_ustr, {});
|
|
|
|
// Without the fix in place, this test would have failed with
|
|
// - Expected: =SUM($Sheet1.B1:C1)
|
|
// - Actual : =SUM($Sheet1.B1:$Sheet1.C1)
|
|
CPPUNIT_ASSERT_EQUAL(u"=SUM($Sheet1.B1:C1)"_ustr, pDoc->GetFormula(0, 2, 0));
|
|
}
|
|
|
|
CPPUNIT_TEST_FIXTURE(ScUiCalcTest, testTdf141440)
|
|
{
|
|
createScDoc();
|
|
ScDocument* pDoc = getScDoc();
|
|
|
|
// Insert a note to cell A1
|
|
goToCell(u"A1"_ustr);
|
|
uno::Sequence<beans::PropertyValue> aArgs
|
|
= comphelper::InitPropertySequence({ { "Text", uno::Any(u"Note in A1"_ustr) } });
|
|
dispatchCommand(mxComponent, u".uno:InsertAnnotation"_ustr, aArgs);
|
|
|
|
// Insert a formula to cell A2
|
|
insertStringToCell(u"A2"_ustr, u"=1+1");
|
|
CPPUNIT_ASSERT_EQUAL(u"2"_ustr, pDoc->GetString(ScAddress(0, 1, 0)));
|
|
|
|
// Copy content of A2 to A1 using paste special command as a formula (Flags F)
|
|
goToCell(u"A2"_ustr);
|
|
dispatchCommand(mxComponent, u".uno:Copy"_ustr, {});
|
|
goToCell(u"A1"_ustr);
|
|
aArgs = comphelper::InitPropertySequence(
|
|
{ { "Flags", uno::Any(u"F"_ustr) },
|
|
{ "FormulaCommand", uno::Any(sal_uInt16(ScPasteFunc::ADD)) },
|
|
{ "SkipEmptyCells", uno::Any(false) },
|
|
{ "Transpose", uno::Any(false) },
|
|
{ "AsLink", uno::Any(false) },
|
|
{ "MoveMode", uno::Any(sal_uInt16(InsCellCmd::INS_NONE)) } });
|
|
dispatchCommand(mxComponent, u".uno:InsertContents"_ustr, aArgs);
|
|
|
|
// Check if string in cell A2 was copied to cell A1
|
|
CPPUNIT_ASSERT_EQUAL(u"2"_ustr, pDoc->GetString(ScAddress(0, 0, 0)));
|
|
// Without the fix in place, there would be no note in cell A1 after using paste special
|
|
CPPUNIT_ASSERT_MESSAGE("There should be a note on A1", pDoc->HasNote(ScAddress(0, 0, 0)));
|
|
CPPUNIT_ASSERT_EQUAL(u"Note in A1"_ustr, pDoc->GetNote(ScAddress(0, 0, 0))->GetText());
|
|
}
|
|
|
|
CPPUNIT_TEST_FIXTURE(ScUiCalcTest, testTdf163019)
|
|
{
|
|
createScDoc();
|
|
ScDocument* pDoc = getScDoc();
|
|
|
|
// Disable replace cell warning
|
|
ScModule* pMod = ScModule::get();
|
|
ScInputOptions aInputOption = pMod->GetInputOptions();
|
|
bool bOldStatus = aInputOption.GetReplaceCellsWarn();
|
|
aInputOption.SetReplaceCellsWarn(false);
|
|
pMod->SetInputOptions(aInputOption);
|
|
|
|
// Insert test data and formulas to create a sample crash document
|
|
insertStringToCell(u"B1"_ustr, u"1");
|
|
insertStringToCell(u"A2"_ustr, u"1");
|
|
insertStringToCell(u"A3"_ustr, u"1");
|
|
insertStringToCell(u"B2"_ustr, u"=B1-A2");
|
|
insertStringToCell(u"B3"_ustr, u"=B2-A3");
|
|
|
|
// Copy content from B2 to B2 using paste special command as a number (Flags ????)
|
|
goToCell(u"B2"_ustr);
|
|
dispatchCommand(mxComponent, u".uno:Copy"_ustr, {});
|
|
goToCell(u"B2"_ustr);
|
|
uno::Sequence<beans::PropertyValue> aArgs = comphelper::InitPropertySequence(
|
|
{ { "Flags", uno::Any(u"V"_ustr) },
|
|
{ "FormulaCommand", uno::Any(sal_uInt16(ScPasteFunc::NONE)) },
|
|
{ "SkipEmptyCells", uno::Any(false) },
|
|
{ "Transpose", uno::Any(false) },
|
|
{ "AsLink", uno::Any(false) },
|
|
{ "MoveMode", uno::Any(sal_uInt16(InsCellCmd::INS_NONE)) } });
|
|
// Without the fix in place, this test would have crashed here
|
|
dispatchCommand(mxComponent, u".uno:InsertContents"_ustr, aArgs);
|
|
CPPUNIT_ASSERT_EQUAL(u"0"_ustr, pDoc->GetString(ScAddress(1, 1, 0)));
|
|
|
|
// Restore previous replace cell warning status
|
|
aInputOption.SetReplaceCellsWarn(bOldStatus);
|
|
pMod->SetInputOptions(aInputOption);
|
|
}
|
|
|
|
CPPUNIT_TEST_FIXTURE(ScUiCalcTest, testTdf158551)
|
|
{
|
|
createScDoc();
|
|
ScDocument* pDoc = getScDoc();
|
|
|
|
insertStringToCell(u"A1"_ustr, u"10");
|
|
|
|
// Copy content of A1 to B1 using Formula Add
|
|
goToCell(u"A1"_ustr);
|
|
dispatchCommand(mxComponent, u".uno:Copy"_ustr, {});
|
|
goToCell(u"B1"_ustr);
|
|
uno::Sequence<beans::PropertyValue> aArgs = comphelper::InitPropertySequence(
|
|
{ { "Flags", uno::Any(u"SVD"_ustr) },
|
|
{ "FormulaCommand", uno::Any(sal_uInt16(ScPasteFunc::ADD)) },
|
|
{ "SkipEmptyCells", uno::Any(false) },
|
|
{ "Transpose", uno::Any(false) },
|
|
{ "AsLink", uno::Any(false) },
|
|
{ "MoveMode", uno::Any(sal_uInt16(InsCellCmd::INS_NONE)) } });
|
|
|
|
// Without the fix in place, this test would have crashed here
|
|
dispatchCommand(mxComponent, u".uno:InsertContents"_ustr, aArgs);
|
|
|
|
CPPUNIT_ASSERT_EQUAL(u"10"_ustr, pDoc->GetString(ScAddress(1, 0, 0)));
|
|
}
|
|
|
|
CPPUNIT_TEST_FIXTURE(ScUiCalcTest, testTdf159174)
|
|
{
|
|
createScDoc();
|
|
|
|
dispatchCommand(mxComponent, u".uno:SelectUnprotectedCells"_ustr, {});
|
|
dispatchCommand(mxComponent, u".uno:Copy"_ustr, {});
|
|
|
|
uno::Sequence<beans::PropertyValue> aPropertyValues = comphelper::InitPropertySequence(
|
|
{ { "SelectedFormat", uno::Any(static_cast<sal_uInt32>(SotClipboardFormatId::BITMAP)) } });
|
|
|
|
// Without the fix in place, this test would have crashed
|
|
dispatchCommand(mxComponent, u".uno:ClipboardFormatItems"_ustr, aPropertyValues);
|
|
|
|
ScModelObj* pModelObj = comphelper::getFromUnoTunnel<ScModelObj>(mxComponent);
|
|
uno::Reference<drawing::XDrawPage> xPage(pModelObj->getDrawPages()->getByIndex(0),
|
|
uno::UNO_QUERY_THROW);
|
|
CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(0), xPage->getCount());
|
|
}
|
|
|
|
CPPUNIT_TEST_FIXTURE(ScUiCalcTest, testKeyboardMergeRef)
|
|
{
|
|
createScDoc();
|
|
ScDocShell* pDocSh = getScDocShell();
|
|
ScModelObj* pModelObj = comphelper::getFromUnoTunnel<ScModelObj>(mxComponent);
|
|
ScTabViewShell* pViewShell = pDocSh->GetBestViewShell(false);
|
|
CPPUNIT_ASSERT(pViewShell);
|
|
|
|
goToCell(u"A1:A5"_ustr);
|
|
dispatchCommand(mxComponent, u".uno:ToggleMergeCells"_ustr, {});
|
|
goToCell(u"A6:A10"_ustr);
|
|
dispatchCommand(mxComponent, u".uno:ToggleMergeCells"_ustr, {});
|
|
|
|
goToCell(u"B1"_ustr);
|
|
typeString(u"=");
|
|
|
|
goToCell(u"A1"_ustr);
|
|
|
|
pModelObj->postKeyEvent(LOK_KEYEVENT_KEYINPUT, 0, KEY_DOWN | KEY_SHIFT);
|
|
pModelObj->postKeyEvent(LOK_KEYEVENT_KEYUP, 0, KEY_DOWN | KEY_SHIFT);
|
|
Scheduler::ProcessEventsToIdle();
|
|
CPPUNIT_ASSERT(pViewShell->IsRefInputMode());
|
|
{
|
|
const OUString* pInput = pViewShell->GetEditString();
|
|
CPPUNIT_ASSERT(pInput);
|
|
CPPUNIT_ASSERT_EQUAL(u"=A1:A10"_ustr, *pInput);
|
|
}
|
|
|
|
pModelObj->postKeyEvent(LOK_KEYEVENT_KEYINPUT, 0, KEY_UP | KEY_SHIFT);
|
|
pModelObj->postKeyEvent(LOK_KEYEVENT_KEYUP, 0, KEY_UP | KEY_SHIFT);
|
|
Scheduler::ProcessEventsToIdle();
|
|
CPPUNIT_ASSERT(pViewShell->IsRefInputMode());
|
|
{
|
|
const OUString* pInput = pViewShell->GetEditString();
|
|
CPPUNIT_ASSERT(pInput);
|
|
CPPUNIT_ASSERT_EQUAL(u"=A1:A5"_ustr, *pInput);
|
|
}
|
|
}
|
|
|
|
CPPUNIT_TEST_FIXTURE(ScUiCalcTest, testMouseMergeRef)
|
|
{
|
|
createScDoc();
|
|
ScDocShell* pDocSh = getScDocShell();
|
|
ScModelObj* pModelObj = comphelper::getFromUnoTunnel<ScModelObj>(mxComponent);
|
|
ScTabViewShell* pViewShell = pDocSh->GetBestViewShell(false);
|
|
CPPUNIT_ASSERT(pViewShell);
|
|
|
|
goToCell(u"A1:A5"_ustr);
|
|
dispatchCommand(mxComponent, u".uno:ToggleMergeCells"_ustr, {});
|
|
goToCell(u"A6:A10"_ustr);
|
|
dispatchCommand(mxComponent, u".uno:ToggleMergeCells"_ustr, {});
|
|
|
|
goToCell(u"B1"_ustr);
|
|
typeString(u"=");
|
|
|
|
Point aA1 = pViewShell->GetViewData().GetPrintTwipsPos(0, 0);
|
|
Point aA6 = pViewShell->GetViewData().GetPrintTwipsPos(0, 5);
|
|
Point aA7 = pViewShell->GetViewData().GetPrintTwipsPos(0, 6);
|
|
|
|
pModelObj->postMouseEvent(LOK_MOUSEEVENT_MOUSEBUTTONDOWN, aA1.X() + 5, aA1.Y() + 5, 1,
|
|
MOUSE_LEFT, 0);
|
|
pModelObj->postMouseEvent(LOK_MOUSEEVENT_MOUSEMOVE, aA6.X() + 5, aA6.Y() + 5, 1, MOUSE_LEFT, 0);
|
|
pModelObj->postMouseEvent(LOK_MOUSEEVENT_MOUSEBUTTONUP, aA7.X() + 5, aA7.Y() + 5, 1, MOUSE_LEFT,
|
|
0);
|
|
Scheduler::ProcessEventsToIdle();
|
|
|
|
CPPUNIT_ASSERT(pViewShell->IsRefInputMode());
|
|
{
|
|
const OUString* pInput = pViewShell->GetEditString();
|
|
CPPUNIT_ASSERT(pInput);
|
|
CPPUNIT_ASSERT_EQUAL(u"=A1:A10"_ustr, *pInput);
|
|
}
|
|
}
|
|
|
|
CPPUNIT_PLUGIN_IMPLEMENT();
|
|
|
|
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|