summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKohei Yoshida <kohei.yoshida@collabora.com>2017-02-01 22:48:55 -0500
committerKohei Yoshida <libreoffice@kohei.us>2017-02-02 05:04:50 +0000
commit9966697b89a68e05f2182dfef984d7b6e8e9ef94 (patch)
treeb3e5b0f1ac94fc6c1bcab97055e26411cd638086
parent73ac88748ff7077e8189603935bd48242cfe9776 (diff)
tdf#105629: add test case for the auto filter usage with time values.
Change-Id: Ic459eefde02037c0aa615044003abaf03e48f9e3 Reviewed-on: https://gerrit.libreoffice.org/33819 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Kohei Yoshida <libreoffice@kohei.us>
-rw-r--r--sc/qa/unit/ucalc.cxx54
-rw-r--r--sc/qa/unit/ucalc.hxx2
2 files changed, 55 insertions, 1 deletions
diff --git a/sc/qa/unit/ucalc.cxx b/sc/qa/unit/ucalc.cxx
index 969c1a23c988..a23bda10a9f2 100644
--- a/sc/qa/unit/ucalc.cxx
+++ b/sc/qa/unit/ucalc.cxx
@@ -54,6 +54,7 @@
#include "queryparam.hxx"
#include "edittextiterator.hxx"
#include "editutil.hxx"
+#include "cellform.hxx"
#include <asciiopt.hxx>
#include <impex.hxx>
#include <columnspanset.hxx>
@@ -3026,6 +3027,55 @@ void Test::testAutofilter()
m_pDoc->DeleteTab(0);
}
+void Test::testAutoFilterTimeValue()
+{
+ m_pDoc->InsertTab(0, "Test");
+
+ m_pDoc->SetString(ScAddress(0,0,0), "Hours");
+ m_pDoc->SetValue(ScAddress(0,1,0), 72.3604166666671);
+ m_pDoc->SetValue(ScAddress(0,2,0), 265);
+
+ ScDBData* pDBData = new ScDBData(STR_DB_GLOBAL_NONAME, 0, 0, 0, 0, 2);
+ m_pDoc->SetAnonymousDBData(0, pDBData);
+
+ // Apply the "hour:minute:second" format to A2:A3.
+ SvNumberFormatter* pFormatter = m_pDoc->GetFormatTable();
+ sal_uInt32 nFormat = pFormatter->GetFormatIndex(NF_TIME_HH_MMSS, LANGUAGE_ENGLISH_US);
+ ScPatternAttr aNewAttrs(m_pDoc->GetPool());
+ SfxItemSet& rSet = aNewAttrs.GetItemSet();
+ rSet.Put(SfxUInt32Item(ATTR_VALUE_FORMAT, nFormat));
+
+ m_pDoc->ApplyPatternAreaTab(0, 1, 0, 2, 0, aNewAttrs); // apply it to A2:A3.
+
+ printRange(m_pDoc, ScRange(0,0,0,0,2,0), "Data"); // A1:A3
+
+ // Make sure the hour:minute:second format is really applied.
+ CPPUNIT_ASSERT_EQUAL(OUString("1736:39:00"), m_pDoc->GetString(ScAddress(0,1,0))); // A2
+ CPPUNIT_ASSERT_EQUAL(OUString("6360:00:00"), m_pDoc->GetString(ScAddress(0,2,0))); // A3
+
+ // Filter by the A2 value. Only A1 and A2 should be visible.
+ ScQueryParam aParam;
+ pDBData->GetQueryParam(aParam);
+ ScQueryEntry& rEntry = aParam.GetEntry(0);
+ rEntry.bDoQuery = true;
+ rEntry.nField = 0;
+ rEntry.eOp = SC_EQUAL;
+ rEntry.GetQueryItem().maString = m_pDoc->GetSharedStringPool().intern("1736:39:00");
+ rEntry.GetQueryItem().meType = ScQueryEntry::ByString;
+
+ pDBData->SetQueryParam(aParam);
+
+ // perform the query.
+ m_pDoc->Query(0, aParam, true);
+
+ // A1:A2 should be visible while A3 should be filtered out.
+ CPPUNIT_ASSERT_MESSAGE("A1 should be visible.", !m_pDoc->RowFiltered(0,0));
+ CPPUNIT_ASSERT_MESSAGE("A2 should be visible.", !m_pDoc->RowFiltered(1,0));
+ CPPUNIT_ASSERT_MESSAGE("A3 should be filtered out.", m_pDoc->RowFiltered(2,0));
+
+ m_pDoc->DeleteTab(0);
+}
+
void Test::testAdvancedFilter()
{
m_pDoc->InsertTab(0, "Test");
@@ -6377,7 +6427,9 @@ void Test::printRange(ScDocument* pDoc, const ScRange& rRange, const char* pCapt
{
for (SCCOL nCol = nCol1; nCol <= nCol2; ++nCol)
{
- OUString aVal = pDoc->GetString(nCol, nRow, rRange.aStart.Tab());
+ ScAddress aPos(nCol, nRow, rRange.aStart.Tab());
+ ScRefCellValue aCell(*pDoc, aPos);
+ OUString aVal = ScCellFormat::GetOutputString(*pDoc, aPos, aCell);
printer.set(nRow-nRow1, nCol-nCol1, aVal);
}
}
diff --git a/sc/qa/unit/ucalc.hxx b/sc/qa/unit/ucalc.hxx
index 0ae9fcd4e019..98524267a47e 100644
--- a/sc/qa/unit/ucalc.hxx
+++ b/sc/qa/unit/ucalc.hxx
@@ -322,6 +322,7 @@ public:
void testSheetMove();
void testDataArea();
void testAutofilter();
+ void testAutoFilterTimeValue();
void testAdvancedFilter();
void testCopyPaste();
void testCopyPasteAsLink();
@@ -625,6 +626,7 @@ public:
CPPUNIT_TEST(testFunctionLists);
CPPUNIT_TEST(testToggleRefFlag);
CPPUNIT_TEST(testAutofilter);
+ CPPUNIT_TEST(testAutoFilterTimeValue);
CPPUNIT_TEST(testAdvancedFilter);
CPPUNIT_TEST(testCopyPaste);
CPPUNIT_TEST(testCopyPasteAsLink);