summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/test/sheet/xspreadsheets2.hxx1
-rw-r--r--sc/qa/extras/sctablesheetsobj.cxx1
-rw-r--r--test/source/sheet/xspreadsheets2.cxx54
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);