sc/qa/extras/sccellrangeobj.cxx | 33 ++++++++++++++++++++++++++++++++- sc/source/ui/unoobj/cellsuno.cxx | 8 ++++++++ 2 files changed, 40 insertions(+), 1 deletion(-)
New commits: commit 99316fc0c830ae6c827d9b7f56bf057ff7731ed5 Author: Michael Meeks <michael.me...@collabora.com> Date: Thu Nov 10 19:11:07 2016 +0000 tdf#103632 - sc: OOB sort fields unit test. Change-Id: I6734d51c8f9c4ca5a01c3e54a71f83ba15db508d Reviewed-on: https://gerrit.libreoffice.org/30761 Tested-by: Jenkins <c...@libreoffice.org> Reviewed-by: Michael Meeks <michael.me...@collabora.com> diff --git a/sc/qa/extras/sccellrangeobj.cxx b/sc/qa/extras/sccellrangeobj.cxx index a81377e..12e2864 100644 --- a/sc/qa/extras/sccellrangeobj.cxx +++ b/sc/qa/extras/sccellrangeobj.cxx @@ -17,13 +17,15 @@ #include <com/sun/star/sheet/XSpreadsheetDocument.hpp> #include <com/sun/star/sheet/XSpreadsheet.hpp> #include <com/sun/star/table/XCellRange.hpp> +#include <com/sun/star/util/XSortable.hpp> +#include <com/sun/star/util/SortField.hpp> using namespace css; using namespace css::uno; namespace sc_apitest { -#define NUMBER_OF_TESTS 14 +#define NUMBER_OF_TESTS 15 class ScCellRangeObj : public CalcUnoApiTest, public apitest::XCellRangesQuery, public apitest::CellProperties, public apitest::XSearchable, public apitest::XReplaceable, public apitest::XCellRangeData @@ -35,6 +37,8 @@ public: virtual void tearDown() override; virtual uno::Reference< uno::XInterface > init() override; virtual uno::Reference< uno::XInterface > getXCellRangeData() override; + void testSortOOB(); + CPPUNIT_TEST_SUITE(ScCellRangeObj); CPPUNIT_TEST(testQueryColumnDifference); @@ -52,6 +56,7 @@ public: CPPUNIT_TEST(testCreateReplaceDescriptor); CPPUNIT_TEST(testGetDataArray); CPPUNIT_TEST(testSetDataArray); + CPPUNIT_TEST(testSortOOB); CPPUNIT_TEST_SUITE_END(); private: @@ -109,6 +114,32 @@ uno::Reference< uno::XInterface > ScCellRangeObj::getXCellRangeData() return xReturn; } +void ScCellRangeObj::testSortOOB() +{ + uno::Reference<util::XSortable> xSortable(init(),UNO_QUERY_THROW); + try { + uno::Sequence<beans::PropertyValue> aEmptyDescriptor; + xSortable->sort(aEmptyDescriptor); + } catch (const uno::Exception &) { + CPPUNIT_FAIL("exception thrown during empty sort"); + } + + try { + uno::Sequence<beans::PropertyValue> aProps(1); + uno::Sequence<util::SortField> aSort(1); + + aSort[0].Field = 0xffffff; + aSort[0].SortAscending = true; + + aProps[0].Name = "SortFields"; + aProps[0].Value = uno::makeAny(aSort); + + xSortable->sort(aProps); + } catch (const uno::Exception &) { + CPPUNIT_FAIL("exception thrown during OOB sort"); + } +} + void ScCellRangeObj::setUp() { nTest++; commit b8fa4d1b2d135cabc9eb5162ca0c5af649f1cdaf Author: Michael Meeks <michael.me...@collabora.com> Date: Fri Nov 4 21:14:34 2016 +0000 tdf#103632 - sc: tolerate OOB sort fields from UNO API. Change-Id: Ie04b4281947a05572672838b3b4b5c6173d8fa0b Reviewed-on: https://gerrit.libreoffice.org/30576 Tested-by: Jenkins <c...@libreoffice.org> Reviewed-by: Michael Meeks <michael.me...@collabora.com> diff --git a/sc/source/ui/unoobj/cellsuno.cxx b/sc/source/ui/unoobj/cellsuno.cxx index 49ac5e2..a1084a6 100644 --- a/sc/source/ui/unoobj/cellsuno.cxx +++ b/sc/source/ui/unoobj/cellsuno.cxx @@ -5598,8 +5598,16 @@ void SAL_CALL ScCellRangeObj::sort( const uno::Sequence<beans::PropertyValue>& a SCCOLROW nFieldStart = aParam.bByRow ? static_cast<SCCOLROW>(aRange.aStart.Col()) : static_cast<SCCOLROW>(aRange.aStart.Row()); + SCCOLROW nFieldEnd = aParam.bByRow ? + static_cast<SCCOLROW>(aRange.aEnd.Col()) : + static_cast<SCCOLROW>(aRange.aEnd.Row()); for (i=0; i<aParam.GetSortKeyCount(); i++) + { aParam.maKeyState[i].nField += nFieldStart; + // tdf#103632 - sanity check poorly behaved macros. + if (aParam.maKeyState[i].nField > nFieldEnd) + aParam.maKeyState[i].nField = nFieldEnd; + } SCTAB nTab = aRange.aStart.Tab(); aParam.nCol1 = aRange.aStart.Col(); _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits