diff options
-rw-r--r-- | include/test/sheet/xspreadsheets2.hxx | 1 | ||||
-rw-r--r-- | sc/qa/extras/sctablesheetsobj.cxx | 1 | ||||
-rw-r--r-- | test/source/sheet/xspreadsheets2.cxx | 54 |
3 files changed, 56 insertions, 0 deletions
diff --git a/include/test/sheet/xspreadsheets2.hxx b/include/test/sheet/xspreadsheets2.hxx index 1340b80be216..6c2cd0952b28 100644 --- a/include/test/sheet/xspreadsheets2.hxx +++ b/include/test/sheet/xspreadsheets2.hxx @@ -36,6 +36,7 @@ public: void testImportNamedRangeRedefinedInSource(); void testImportNewNamedRange(); void testImportCellStyle(); + void testLastAfterInsertCopy(); virtual css::uno::Reference< css::lang::XComponent > getComponent() = 0; virtual css::uno::Reference< css::uno::XInterface > init() = 0; diff --git a/sc/qa/extras/sctablesheetsobj.cxx b/sc/qa/extras/sctablesheetsobj.cxx index 6a8f0928d954..99d55ea75a16 100644 --- a/sc/qa/extras/sctablesheetsobj.cxx +++ b/sc/qa/extras/sctablesheetsobj.cxx @@ -53,6 +53,7 @@ public: CPPUNIT_TEST(testImportNamedRangeRedefinedInSource); CPPUNIT_TEST(testImportNewNamedRange); CPPUNIT_TEST(testImportCellStyle); + CPPUNIT_TEST(testLastAfterInsertCopy); // XNameContainer CPPUNIT_TEST(testRemoveByName); diff --git a/test/source/sheet/xspreadsheets2.cxx b/test/source/sheet/xspreadsheets2.cxx index fc7f1023fc1c..dee4e3136a09 100644 --- a/test/source/sheet/xspreadsheets2.cxx +++ b/test/source/sheet/xspreadsheets2.cxx @@ -44,6 +44,9 @@ static constexpr OUStringLiteral gaSrcSheetName("SheetToCopy"); static constexpr OUStringLiteral gaSrcFileName("rangenamessrc.ods"); static constexpr OUStringLiteral gaDestFileBase("ScNamedRangeObj.ods"); +static sal_Int32 nInsertedSheets(0); + + XSpreadsheets2::XSpreadsheets2() { } @@ -275,6 +278,56 @@ void XSpreadsheets2::testImportCellStyle() CPPUNIT_ASSERT_EQUAL_MESSAGE("New style: VertJustify not set", table::CellVertJustify_CENTER, static_cast<table::CellVertJustify>(aVertJustify)); } +void XSpreadsheets2::testLastAfterInsertCopy() +{ + /** Test that results in row 1 of all inserted sheets are equal to the + source sheet. The loaded destination document is kept open so several + sheets are imported. + */ + + CPPUNIT_ASSERT(nInsertedSheets > 0); + constexpr sal_Int32 nCols = 7; + + uno::Reference< container::XNameAccess> xSrcNameAccess(init(),UNO_QUERY_THROW); + xSrcSheet.set( xSrcNameAccess->getByName(gaSrcSheetName), UNO_QUERY_THROW); + + OUString aSrcString[nCols]; + for (sal_Int32 nCol=0; nCol < nCols; ++nCol) + { + uno::Reference< table::XCell > xSrcCell = xSrcSheet->getCellByPosition(nCol, 0); + uno::Reference< text::XTextRange > xSrcTextRange(xSrcCell, UNO_QUERY_THROW); + aSrcString[nCol] = xSrcTextRange->getString(); + } + // The named range 'initial2' is already present in the destination + // document defined to $Sheet1.$B$2 and thus is not copied, pointing to + // "content2" instead. + aSrcString[6] = "content2"; + + xDestDoc = getDoc(gaDestFileBase); + CPPUNIT_ASSERT(xDestDoc.is()); + uno::Reference< container::XIndexAccess > xDestSheetIndexAccess (xDestDoc->getSheets(), UNO_QUERY_THROW); + CPPUNIT_ASSERT( nInsertedSheets < xDestSheetIndexAccess->getCount()); + for (sal_Int32 nSheet=0; nSheet < nInsertedSheets; ++nSheet) + { + xDestSheet.set( xDestSheetIndexAccess->getByIndex(nSheet), UNO_QUERY_THROW); + for (sal_Int32 nCol=0; nCol < nCols; ++nCol) + { + uno::Reference< table::XCell > xDestCell = xDestSheet->getCellByPosition(nCol, 0); + uno::Reference< text::XTextRange > xDestTextRange(xDestCell, UNO_QUERY_THROW); + OUString aDestString = xDestTextRange->getString(); + + if (nCol == 4 && aDestString == "Err:540") + // The created external reference to the source document not + // allowed may result in Err:540 + continue; + + OString aMessage("Imported result does not match, sheet " + OString::number(nSheet) + + " column " + OString::number(nCol)); + CPPUNIT_ASSERT_EQUAL_MESSAGE( aMessage.getStr(), aSrcString[nCol], aDestString); + } + } +} + uno::Reference< sheet::XSpreadsheetDocument> XSpreadsheets2::getDoc(const OUString& aFileBase) { OUString aFileURL; @@ -308,6 +361,7 @@ void XSpreadsheets2::importSheetToCopy() sal_Int32 nDestPos = 0; sal_Int32 nDestPosEffective = xDestSheets->importSheet(xDocument, gaSrcSheetName, nDestPos); CPPUNIT_ASSERT_EQUAL_MESSAGE("Wrong sheet index", nDestPos, nDestPosEffective); + ++nInsertedSheets; uno::Reference< container::XIndexAccess > xDestSheetIndexAccess (xDestDoc->getSheets(), UNO_QUERY_THROW); xDestSheet.set( xDestSheetIndexAccess->getByIndex(nDestPosEffective), UNO_QUERY_THROW); |