/* -*- 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_v
iew 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, testTdf165821)
{
createScDoc();
insertStringToCell(u"A1" _ustr, u"=COUNTA(XFD:XFD)" );
ScDocument* pDoc = getScDoc();
// Without the fix in place, this test would have failed with
// - Expected: 0
// - Actual : 1
CPPUNIT_ASSERT_EQUAL(u"0" _ustr, pDoc->GetString(ScAddress(0, 0, 0)));
}
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();
--> --------------------
--> maximum size reached
--> --------------------
Messung V0.5 C=96 H=93 G=94
¤ Dauer der Verarbeitung: 0.30 Sekunden
(vorverarbeitet)
¤
*© Formatika GbR, Deutschland