diff options
author | Kohei Yoshida <kohei.yoshida@collabora.com> | 2014-07-13 20:56:38 -0400 |
---|---|---|
committer | Kohei Yoshida <kohei.yoshida@collabora.com> | 2014-07-13 20:56:38 -0400 |
commit | 9943473a4c4e5dd464d8bcb44e1f477f5045c22f (patch) | |
tree | d234f2bee8d4cfc52ba9c4c84be7c127f907fc30 | |
parent | 5ed9dea7fa3df2bebcda116734dc8643eb35be18 (diff) |
fdo#81309: Write test for out-of-place sorting.
Change-Id: Id98c080e2b1ba120b1ac4f9f27e6ab10574daa88
-rw-r--r-- | sc/qa/unit/ucalc.cxx | 69 | ||||
-rw-r--r-- | sc/qa/unit/ucalc.hxx | 2 |
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); |