From 2c5be9611c3c74d02bd4fd5ac05170ea83d1ba20 Mon Sep 17 00:00:00 2001 From: Henry Castro Date: Thu, 7 May 2015 17:01:36 -0400 Subject: Unit test for tdf#83366 Change-Id: If0bea3c3a2b0d098e82fd54c069f99041e6ace81 --- sc/CppunitTest_sc_subsequent_filters_test.mk | 1 + sc/qa/unit/subsequent_filters-test.cxx | 84 ++++++++++++++++++++++++++++ 2 files changed, 85 insertions(+) diff --git a/sc/CppunitTest_sc_subsequent_filters_test.mk b/sc/CppunitTest_sc_subsequent_filters_test.mk index d56fd20c4653..08dedbb705ce 100644 --- a/sc/CppunitTest_sc_subsequent_filters_test.mk +++ b/sc/CppunitTest_sc_subsequent_filters_test.mk @@ -98,6 +98,7 @@ $(eval $(call gb_CppunitTest_use_components,sc_subsequent_filters_test,\ sfx2/util/sfx \ sot/util/sot \ svl/util/svl \ + svl/source/fsstor/fsstorage \ svtools/util/svt \ toolkit/util/tk \ ucb/source/core/ucb1 \ diff --git a/sc/qa/unit/subsequent_filters-test.cxx b/sc/qa/unit/subsequent_filters-test.cxx index dbc5ac173330..61fd98f43cfa 100644 --- a/sc/qa/unit/subsequent_filters-test.cxx +++ b/sc/qa/unit/subsequent_filters-test.cxx @@ -50,6 +50,7 @@ #include "cellvalue.hxx" #include "attrib.hxx" #include "dpshttab.hxx" +#include "tabvwsh.hxx" #include #include #include @@ -63,7 +64,9 @@ #include #include #include +#include #include +#include #include #include #include @@ -191,6 +194,7 @@ public: void testVBAUserFunctionXLSM(); void testEmbeddedImageXLS(); void testEditEngStrikeThroughXLSX(); + void testCopyPasteXLS(); CPPUNIT_TEST_SUITE(ScFiltersTest); CPPUNIT_TEST(testBooleanFormatXLSX); @@ -280,6 +284,7 @@ public: CPPUNIT_TEST(testEmbeddedImageXLS); CPPUNIT_TEST(testErrorOnExternalReferences); CPPUNIT_TEST(testEditEngStrikeThroughXLSX); + CPPUNIT_TEST(testCopyPasteXLS); CPPUNIT_TEST_SUITE_END(); private: @@ -2936,6 +2941,85 @@ void ScFiltersTest::testEditEngStrikeThroughXLSX() } } +// tdf#83366 +void ScFiltersTest::testCopyPasteXLS() +{ + uno::Reference< frame::XDesktop2 > xDesktop = frame::Desktop::create(::comphelper::getProcessComponentContext()); + CPPUNIT_ASSERT( xDesktop.is() ); + + // create a frame + Reference< frame::XFrame > xTargetFrame = xDesktop->findFrame( OUString("_blank"), 0 ); + CPPUNIT_ASSERT( xTargetFrame.is() ); + + // 1. Open the document + ScDocShellRef xDocSh = loadDoc("chartx.", XLS); + CPPUNIT_ASSERT_MESSAGE("Failed to load chartx.xls.", xDocSh.Is()); + + uno::Reference< frame::XModel2 > xModel2 ( xDocSh->GetModel(), UNO_QUERY ); + CPPUNIT_ASSERT( xModel2.is() ); + + Reference< frame::XController2 > xController ( xModel2->createDefaultViewController( xTargetFrame ), UNO_QUERY ); + CPPUNIT_ASSERT( xController.is() ); + + // introduce model/view/controller to each other + xController->attachModel( xModel2.get() ); + xModel2->connectController( xController.get() ); + xTargetFrame->setComponent( xController->getComponentWindow(), xController.get() ); + xController->attachFrame( xTargetFrame ); + xModel2->setCurrentController( xController.get() ); + + ScDocument& rDoc = xDocSh->GetDocument(); + + // Get the document controller + ScTabViewShell* pViewShell = xDocSh->GetBestViewShell(false); + CPPUNIT_ASSERT(pViewShell != NULL); + + // 2. Highlight B2:C5 + ScRange aSrcRange; + sal_uInt16 nRes = aSrcRange.Parse("B2:C5", &rDoc, rDoc.GetAddressConvention()); + CPPUNIT_ASSERT_MESSAGE("Failed to parse.", (nRes & SCA_VALID) != 0); + + ScMarkData aMark; + aMark.SetMarkArea(aSrcRange); + + pViewShell->GetViewData().GetMarkData().SetMarkArea(aSrcRange); + + // 3. Copy + ScDocument aClipDoc(SCDOCMODE_CLIP); + pViewShell->GetViewData().GetView()->CopyToClip(&aClipDoc, false, false, false, false); + + // 4. Close the document (Ctrl-W) + xDocSh->DoClose(); + + // 5. Create a new Spreadsheet + Sequence < beans::PropertyValue > args(1); + args[0].Name = "Hidden"; + args[0].Value <<= sal_True; + + uno::Reference< lang::XComponent > xComponent = xDesktop->loadComponentFromURL( + OUString("private:factory/scalc"), + OUString("_blank"), + 0, + args ); + CPPUNIT_ASSERT( xComponent.is() ); + + // Get the document model + SfxObjectShell* pFoundShell = SfxObjectShell::GetShellFromComponent(xComponent); + CPPUNIT_ASSERT_MESSAGE("Failed to access document shell", pFoundShell); + + xDocSh = dynamic_cast(pFoundShell); + CPPUNIT_ASSERT(xDocSh != NULL); + + // Get the document controller + pViewShell = xDocSh->GetBestViewShell(false); + CPPUNIT_ASSERT(pViewShell != NULL); + + // 6. Paste + pViewShell->GetViewData().GetView()->PasteFromClip(IDF_ALL, &aClipDoc); + + xDocSh->DoClose(); +} + ScFiltersTest::ScFiltersTest() : ScBootstrapFixture( "/sc/qa/unit/data" ) { -- cgit v1.2.3