[Libreoffice-commits] core.git: 2 commits - sc/qa sc/source
Kohei Yoshida
kohei.yoshida at collabora.com
Wed Feb 19 04:54:37 CET 2014
sc/qa/unit/ucalc.cxx | 87 ++++++++++++++++++++++++++++++----------
sc/qa/unit/ucalc.hxx | 9 ++++
sc/source/core/data/column3.cxx | 25 +++++++++--
3 files changed, 95 insertions(+), 26 deletions(-)
New commits:
commit ca50752c34de4477c696471b707e1b8136e27661
Author: Kohei Yoshida <kohei.yoshida at collabora.com>
Date: Tue Feb 18 22:57:39 2014 -0500
fdo#72491: Always set input as text when that's requested.
Even when the text begins with '='.
Change-Id: I6e0a995f3042240b9f78068b5d0b9b758eb253ed
diff --git a/sc/source/core/data/column3.cxx b/sc/source/core/data/column3.cxx
index 1445848..5776ac9 100644
--- a/sc/source/core/data/column3.cxx
+++ b/sc/source/core/data/column3.cxx
@@ -1485,6 +1485,19 @@ void ScColumn::StartListeningInArea( sc::StartListeningContext& rCxt, SCROW nRow
sc::ProcessFormula(maCells.begin(), maCells, nRow1, nRow2, aFunc);
}
+namespace {
+
+void applyTextNumFormat( ScColumn& rCol, SCROW nRow, SvNumberFormatter* pFormatter )
+{
+ sal_uInt32 nFormat = pFormatter->GetStandardFormat(NUMBERFORMAT_TEXT);
+ ScPatternAttr aNewAttrs(rCol.GetDoc().GetPool());
+ SfxItemSet& rSet = aNewAttrs.GetItemSet();
+ rSet.Put(SfxUInt32Item(ATTR_VALUE_FORMAT, nFormat));
+ rCol.ApplyPattern(nRow, aNewAttrs);
+}
+
+}
+
bool ScColumn::ParseString(
ScCellValue& rCell, SCROW nRow, SCTAB nTabP, const OUString& rString,
formula::FormulaGrammar::AddressConvention eConv,
@@ -1521,6 +1534,12 @@ bool ScColumn::ParseString(
{
rCell.set(rPool.intern(rString));
}
+ else if (aParam.meSetTextNumFormat == ScSetStringParam::Always)
+ {
+ // Set the cell format type to Text.
+ applyTextNumFormat(*this, nRow, aParam.mpNumFormatter);
+ rCell.set(rPool.intern(rString));
+ }
else // = Formula
rCell.set(
new ScFormulaCell(
@@ -1625,11 +1644,7 @@ bool ScColumn::ParseString(
if (aParam.meSetTextNumFormat != ScSetStringParam::Never && aParam.mpNumFormatter->IsNumberFormat(rString, nIndex, nVal))
{
// Set the cell format type to Text.
- sal_uInt32 nFormat = aParam.mpNumFormatter->GetStandardFormat(NUMBERFORMAT_TEXT);
- ScPatternAttr aNewAttrs(pDocument->GetPool());
- SfxItemSet& rSet = aNewAttrs.GetItemSet();
- rSet.Put( SfxUInt32Item(ATTR_VALUE_FORMAT, nFormat) );
- ApplyPattern(nRow, aNewAttrs);
+ applyTextNumFormat(*this, nRow, aParam.mpNumFormatter);
}
rCell.set(rPool.intern(rString));
commit 891817922121765cef65ae73ebf7fdc524083d20
Author: Kohei Yoshida <kohei.yoshida at collabora.com>
Date: Tue Feb 18 22:11:10 2014 -0500
fdo#72491: Add test for this.
Change-Id: Ic37402cb950783b080e5f185b98b19aea62efa7e
diff --git a/sc/qa/unit/ucalc.cxx b/sc/qa/unit/ucalc.cxx
index c7c9ba5..ed84bf2 100644
--- a/sc/qa/unit/ucalc.cxx
+++ b/sc/qa/unit/ucalc.cxx
@@ -1729,9 +1729,7 @@ void Test::testFuncParam()
void Test::testNamedRange()
{
- struct {
- const char* pName; const char* pExpr; sal_uInt16 nIndex;
- } aNames[] = {
+ RangeNameDef aNames[] = {
{ "Divisor", "$Sheet1.$A$1:$A$1048576", 1 },
{ "MyRange1", "$Sheet1.$A$1:$A$100", 2 },
{ "MyRange2", "$Sheet1.$B$1:$B$100", 3 },
@@ -1742,31 +1740,22 @@ void Test::testNamedRange()
m_pDoc->SetValue (0, 0, 0, 101);
- ScAddress aA1(0, 0, 0);
- ScRangeName* pNewRanges = new ScRangeName();
- for (size_t i = 0; i < SAL_N_ELEMENTS(aNames); ++i)
- {
- ScRangeData* pNew = new ScRangeData(
- m_pDoc,
- OUString::createFromAscii(aNames[i].pName),
- OUString::createFromAscii(aNames[i].pExpr),
- aA1, 0, formula::FormulaGrammar::GRAM_ENGLISH);
- pNew->SetIndex(aNames[i].nIndex);
- bool bSuccess = pNewRanges->insert(pNew);
- CPPUNIT_ASSERT_MESSAGE ("insertion failed", bSuccess);
- }
+ bool bSuccess = insertRangeNames(m_pDoc, aNames, aNames + SAL_N_ELEMENTS(aNames));
+ CPPUNIT_ASSERT_MESSAGE("Failed to insert range names.", bSuccess);
+
+ ScRangeName* pNewRanges = m_pDoc->GetRangeName();
+ CPPUNIT_ASSERT(pNewRanges);
// Make sure the index lookup does the right thing.
for (size_t i = 0; i < SAL_N_ELEMENTS(aNames); ++i)
{
- const ScRangeData* p = pNewRanges->findByIndex(aNames[i].nIndex);
+ const ScRangeData* p = pNewRanges->findByIndex(aNames[i].mnIndex);
CPPUNIT_ASSERT_MESSAGE("lookup of range name by index failed.", p);
OUString aName = p->GetName();
- CPPUNIT_ASSERT_MESSAGE("wrong range name is retrieved.", aName.equalsAscii(aNames[i].pName));
+ CPPUNIT_ASSERT_MESSAGE("wrong range name is retrieved.", aName.equalsAscii(aNames[i].mpName));
}
// Test usage in formula expression.
- m_pDoc->SetRangeName(pNewRanges);
m_pDoc->SetString (1, 0, 0, OUString("=A1/Divisor"));
m_pDoc->CalcAll();
@@ -1780,16 +1769,48 @@ void Test::testNamedRange()
// Make sure the index lookup still works.
for (size_t i = 0; i < SAL_N_ELEMENTS(aNames); ++i)
{
- const ScRangeData* p = pCopiedRanges->findByIndex(aNames[i].nIndex);
+ const ScRangeData* p = pCopiedRanges->findByIndex(aNames[i].mnIndex);
CPPUNIT_ASSERT_MESSAGE("lookup of range name by index failed with the copied instance.", p);
OUString aName = p->GetName();
- CPPUNIT_ASSERT_MESSAGE("wrong range name is retrieved with the copied instance.", aName.equalsAscii(aNames[i].pName));
+ CPPUNIT_ASSERT_MESSAGE("wrong range name is retrieved with the copied instance.", aName.equalsAscii(aNames[i].mpName));
}
m_pDoc->SetRangeName(NULL); // Delete the names.
m_pDoc->DeleteTab(0);
}
+void Test::testInsertNameList()
+{
+ m_pDoc->InsertTab(0, "Test");
+
+ RangeNameDef aNames[] = {
+ { "MyRange1", "$Test.$A$1:$A$100", 1 },
+ { "MyRange2", "$Test.$B$1:$B$100", 2 },
+ { "MyRange3", "$Test.$C$1:$C$100", 3 }
+ };
+
+ bool bSuccess = insertRangeNames(m_pDoc, aNames, aNames + SAL_N_ELEMENTS(aNames));
+ CPPUNIT_ASSERT_MESSAGE("Failed to insert range names.", bSuccess);
+
+ ScDocFunc& rDocFunc = getDocShell().GetDocFunc();
+ ScAddress aPos(1,1,0);
+ rDocFunc.InsertNameList(aPos, true);
+
+ for (size_t i = 0; i < SAL_N_ELEMENTS(aNames); ++i, aPos.IncRow())
+ {
+ OUString aName = m_pDoc->GetString(aPos);
+ CPPUNIT_ASSERT_EQUAL(OUString::createFromAscii(aNames[i].mpName), aName);
+ ScAddress aExprPos = aPos;
+ aExprPos.IncCol();
+ OUString aExpr = m_pDoc->GetString(aExprPos);
+ OUString aExpected = "=";
+ aExpected += OUString::createFromAscii(aNames[i].mpExpr);
+ CPPUNIT_ASSERT_EQUAL(aExpected, aExpr);
+ }
+
+ m_pDoc->DeleteTab(0);
+}
+
void Test::testCSV()
{
const int English = 0, European = 1;
@@ -5845,6 +5866,30 @@ void Test::testMixData()
m_pDoc->DeleteTab(0);
}
+bool Test::insertRangeNames(ScDocument* pDoc, const RangeNameDef* p, const RangeNameDef* pEnd)
+{
+ ScAddress aA1(0, 0, 0);
+ ScRangeName* pNewRanges = new ScRangeName();
+ for (; p != pEnd; ++p)
+ {
+ ScRangeData* pNew = new ScRangeData(
+ pDoc,
+ OUString::createFromAscii(p->mpName),
+ OUString::createFromAscii(p->mpExpr),
+ aA1, 0, formula::FormulaGrammar::GRAM_ENGLISH);
+ pNew->SetIndex(p->mnIndex);
+ bool bSuccess = pNewRanges->insert(pNew);
+ if (!bSuccess)
+ {
+ cerr << "Insertion failed." << endl;
+ return false;
+ }
+ }
+
+ pDoc->SetRangeName(pNewRanges);
+ return true;
+}
+
void Test::printRange(ScDocument* pDoc, const ScRange& rRange, const char* pCaption)
{
SCROW nRow1 = rRange.aStart.Row(), nRow2 = rRange.aEnd.Row();
diff --git a/sc/qa/unit/ucalc.hxx b/sc/qa/unit/ucalc.hxx
index 01cb908..c40469a 100644
--- a/sc/qa/unit/ucalc.hxx
+++ b/sc/qa/unit/ucalc.hxx
@@ -31,7 +31,14 @@ public:
class Test : public test::BootstrapFixture
{
public:
+ struct RangeNameDef
+ {
+ const char* mpName;
+ const char* mpExpr;
+ sal_uInt16 mnIndex;
+ };
+ static bool insertRangeNames(ScDocument* pDoc, const RangeNameDef* p, const RangeNameDef* pEnd);
static void printRange(ScDocument* pDoc, const ScRange& rRange, const char* pCaption);
static void clearRange(ScDocument* pDoc, const ScRange& rRange);
static void copyToClip(ScDocument* pSrcDoc, const ScRange& rRange, ScDocument* pClipDoc);
@@ -160,6 +167,7 @@ public:
void testFuncParam();
void testNamedRange();
+ void testInsertNameList();
void testCSV();
void testMatrix();
void testEnterMixedMatrix();
@@ -377,6 +385,7 @@ public:
CPPUNIT_TEST(testCellBroadcaster);
CPPUNIT_TEST(testFuncParam);
CPPUNIT_TEST(testNamedRange);
+ CPPUNIT_TEST(testInsertNameList);
CPPUNIT_TEST(testCSV);
CPPUNIT_TEST(testMatrix);
CPPUNIT_TEST(testEnterMixedMatrix);
More information about the Libreoffice-commits
mailing list