summaryrefslogtreecommitdiff
path: root/sc
diff options
context:
space:
mode:
authorKohei Yoshida <kohei.yoshida@collabora.com>2014-07-13 20:56:38 -0400
committerKohei Yoshida <kohei.yoshida@collabora.com>2014-07-13 20:56:38 -0400
commit9943473a4c4e5dd464d8bcb44e1f477f5045c22f (patch)
treed234f2bee8d4cfc52ba9c4c84be7c127f907fc30 /sc
parent5ed9dea7fa3df2bebcda116734dc8643eb35be18 (diff)
fdo#81309: Write test for out-of-place sorting.
Change-Id: Id98c080e2b1ba120b1ac4f9f27e6ab10574daa88
Diffstat (limited to 'sc')
-rw-r--r--sc/qa/unit/ucalc.cxx69
-rw-r--r--sc/qa/unit/ucalc.hxx2
2 files changed, 70 insertions, 1 deletions
diff --git a/sc/qa/unit/ucalc.cxx b/sc/qa/unit/ucalc.cxx
index e8aa49ca62bc..1c107260e7ef 100644
--- a/sc/qa/unit/ucalc.cxx
+++ b/sc/qa/unit/ucalc.cxx
@@ -5561,7 +5561,7 @@ void Test::testSortRefUpdate3()
m_pDoc->SetAnonymousDBData(
0, new ScDBData(STR_DB_LOCAL_NONAME, 0, 0, 0, 0, 5));
- // Sort A1:B5 by column A (with a row header).
+ // Sort A1:A6 by column A (with a row header).
ScSortParam aSortData;
aSortData.nCol1 = 0;
aSortData.nCol2 = 0;
@@ -5615,6 +5615,73 @@ void Test::testSortRefUpdate3()
m_pDoc->DeleteTab(0);
}
+void Test::testSortOutOfPlaceResult()
+{
+ m_pDoc->InsertTab(0, "Sort");
+
+ const char* pData[] = {
+ "Header",
+ "1",
+ "23",
+ "2",
+ "9",
+ "-2",
+ 0 // terminator
+ };
+
+ // source data in A1:A6.
+ for (SCROW i = 0; pData[i]; ++i)
+ m_pDoc->SetString(ScAddress(0,i,0), OUString::createFromAscii(pData[i]));
+
+ // Check the initial values.
+ CPPUNIT_ASSERT_EQUAL(OUString("Header"), m_pDoc->GetString(ScAddress(0,0,0)));
+ CPPUNIT_ASSERT_EQUAL( 1.0, m_pDoc->GetValue(ScAddress(0,1,0)));
+ CPPUNIT_ASSERT_EQUAL(23.0, m_pDoc->GetValue(ScAddress(0,2,0)));
+ CPPUNIT_ASSERT_EQUAL( 2.0, m_pDoc->GetValue(ScAddress(0,3,0)));
+ CPPUNIT_ASSERT_EQUAL( 9.0, m_pDoc->GetValue(ScAddress(0,4,0)));
+ CPPUNIT_ASSERT_EQUAL(-2.0, m_pDoc->GetValue(ScAddress(0,5,0)));
+
+ ScDBDocFunc aFunc(getDocShell());
+
+ // Sort A1:A6, and set the result to C2:C7
+ m_pDoc->SetAnonymousDBData(
+ 0, new ScDBData(STR_DB_LOCAL_NONAME, 0, 0, 0, 0, 5));
+
+ ScSortParam aSortData;
+ aSortData.nCol1 = 0;
+ aSortData.nCol2 = 0;
+ aSortData.nRow1 = 0;
+ aSortData.nRow2 = 5;
+ aSortData.bHasHeader = true;
+ aSortData.bInplace = false;
+ aSortData.nDestTab = 0;
+ aSortData.nDestCol = 2;
+ aSortData.nDestRow = 1;
+ aSortData.maKeyState[0].bDoSort = true;
+ aSortData.maKeyState[0].nField = 0;
+ aSortData.maKeyState[0].bAscending = true;
+ bool bSorted = aFunc.Sort(0, aSortData, true, true, true);
+ CPPUNIT_ASSERT(bSorted);
+
+ // Source data still intact.
+ CPPUNIT_ASSERT_EQUAL(OUString("Header"), m_pDoc->GetString(ScAddress(0,0,0)));
+ CPPUNIT_ASSERT_EQUAL( 1.0, m_pDoc->GetValue(ScAddress(0,1,0)));
+ CPPUNIT_ASSERT_EQUAL(23.0, m_pDoc->GetValue(ScAddress(0,2,0)));
+ CPPUNIT_ASSERT_EQUAL( 2.0, m_pDoc->GetValue(ScAddress(0,3,0)));
+ CPPUNIT_ASSERT_EQUAL( 9.0, m_pDoc->GetValue(ScAddress(0,4,0)));
+ CPPUNIT_ASSERT_EQUAL(-2.0, m_pDoc->GetValue(ScAddress(0,5,0)));
+
+ // Sort result in C2:C7.
+ CPPUNIT_ASSERT_EQUAL(OUString("Header"), m_pDoc->GetString(ScAddress(2,1,0)));
+ CPPUNIT_ASSERT_EQUAL(-2.0, m_pDoc->GetValue(ScAddress(2,2,0)));
+ CPPUNIT_ASSERT_EQUAL( 1.0, m_pDoc->GetValue(ScAddress(2,3,0)));
+ CPPUNIT_ASSERT_EQUAL( 2.0, m_pDoc->GetValue(ScAddress(2,4,0)));
+ CPPUNIT_ASSERT_EQUAL( 9.0, m_pDoc->GetValue(ScAddress(2,5,0)));
+ CPPUNIT_ASSERT_EQUAL(23.0, m_pDoc->GetValue(ScAddress(2,6,0)));
+
+ m_pDoc->DeleteTab(0);
+}
+
void Test::testShiftCells()
{
m_pDoc->InsertTab(0, "foo");
diff --git a/sc/qa/unit/ucalc.hxx b/sc/qa/unit/ucalc.hxx
index 7725f3046bed..92342c4178ce 100644
--- a/sc/qa/unit/ucalc.hxx
+++ b/sc/qa/unit/ucalc.hxx
@@ -349,6 +349,7 @@ public:
void testSortRefUpdate();
void testSortRefUpdate2();
void testSortRefUpdate3();
+ void testSortOutOfPlaceResult();
void testShiftCells();
void testNoteBasic();
@@ -521,6 +522,7 @@ public:
CPPUNIT_TEST(testSortRefUpdate);
CPPUNIT_TEST(testSortRefUpdate2);
CPPUNIT_TEST(testSortRefUpdate3);
+ CPPUNIT_TEST(testSortOutOfPlaceResult);
CPPUNIT_TEST(testShiftCells);
CPPUNIT_TEST(testNoteBasic);
CPPUNIT_TEST(testNoteDeleteRow);