diff options
author | Zolnai Tamás <tamas.zolnai@collabora.com> | 2014-11-07 16:44:54 +0100 |
---|---|---|
committer | Zolnai Tamás <tamas.zolnai@collabora.com> | 2014-11-16 20:27:32 +0100 |
commit | c454a0cd0cc7b315b1353b151a2e95654df72c69 (patch) | |
tree | 8364dd9cf22fa898893942b68d8ffeafd96b9799 /svtools | |
parent | f3ff1195cfab0199ebbfda1b1b4f72a78f3093b8 (diff) |
Test for size based auto swap out mechanism
Change-Id: Iff0942b9b545f27dd74b73bee3f8ac785539867d
Diffstat (limited to 'svtools')
-rw-r--r-- | svtools/CppunitTest_svtools_graphic.mk | 40 | ||||
-rw-r--r-- | svtools/qa/unit/GraphicObjectTest.cxx | 108 | ||||
-rw-r--r-- | svtools/qa/unit/data/document_with_two_images.odt | bin | 0 -> 204546 bytes |
3 files changed, 144 insertions, 4 deletions
diff --git a/svtools/CppunitTest_svtools_graphic.mk b/svtools/CppunitTest_svtools_graphic.mk index ef9c7abfbbb2..6036afbba01e 100644 --- a/svtools/CppunitTest_svtools_graphic.mk +++ b/svtools/CppunitTest_svtools_graphic.mk @@ -11,6 +11,7 @@ $(eval $(call gb_CppunitTest_CppunitTest,svtools_graphic)) $(eval $(call gb_CppunitTest_use_externals,svtools_graphic,\ boost_headers \ + libxml2 \ )) $(eval $(call gb_CppunitTest_use_api,svtools_graphic, \ @@ -29,18 +30,53 @@ $(eval $(call gb_CppunitTest_use_libraries,svtools_graphic, \ tl \ sal \ svt \ + sw \ test \ unotest \ vcl \ $(gb_UWINAPI) \ )) +$(eval $(call gb_CppunitTest_set_include,svtools_graphic,\ + -I$(SRCDIR)/sw/inc \ + $$(INCLUDE) \ +)) + +$(eval $(call gb_CppunitTest_use_custom_headers,svtools_graphic,\ + officecfg/registry \ +)) + $(eval $(call gb_CppunitTest_use_configuration,svtools_graphic)) $(eval $(call gb_CppunitTest_use_components,svtools_graphic,\ - configmgr/source/configmgr \ - ucb/source/core/ucb1 \ + basic/util/sb \ + comphelper/util/comphelp \ + configmgr/source/configmgr \ + embeddedobj/util/embobj \ + filter/source/config/cache/filterconfig1 \ + filter/source/storagefilterdetect/storagefd \ + framework/util/fwk \ + i18npool/util/i18npool \ + linguistic/source/lng \ + oox/util/oox \ + package/source/xstor/xstor \ + package/util/package2 \ + sax/source/expatwrap/expwrap \ + sfx2/util/sfx \ + starmath/util/sm \ + svl/source/fsstor/fsstorage \ + svtools/util/svt \ + sw/util/sw \ + sw/util/swd \ + toolkit/util/tk \ + ucb/source/core/ucb1 \ ucb/source/ucp/file/ucpfile1 \ + unotools/util/utl \ + unoxml/source/service/unoxml \ + uui/util/uui \ + writerfilter/util/writerfilter \ + $(if $(filter DESKTOP,$(BUILD_TYPE)),xmlhelp/util/ucpchelp1) \ + xmloff/util/xo \ )) $(eval $(call gb_CppunitTest_add_exception_objects,svtools_graphic, \ diff --git a/svtools/qa/unit/GraphicObjectTest.cxx b/svtools/qa/unit/GraphicObjectTest.cxx index 29259c45c3f9..34e26fd770a6 100644 --- a/svtools/qa/unit/GraphicObjectTest.cxx +++ b/svtools/qa/unit/GraphicObjectTest.cxx @@ -19,21 +19,42 @@ #include <vcl/image.hxx> +#include <com/sun/star/frame/Desktop.hpp> +#include <officecfg/Office/Common.hxx> +#include <unotest/macros_test.hxx> +#include <comphelper/processfactory.hxx> +#include <unotxdoc.hxx> +#include <docsh.hxx> +#include <doc.hxx> +#include <ndgrf.hxx> +#include <boost/shared_ptr.hpp> + +using namespace css; + namespace { -class GraphicObjectTest: public test::BootstrapFixture +class GraphicObjectTest: public test::BootstrapFixture, public unotest::MacrosTest { public: void testSwap(); + void testSizeBasedAutoSwap(); + + + virtual void setUp() SAL_OVERRIDE + { + test::BootstrapFixture::setUp(); + + mxDesktop.set(css::frame::Desktop::create(comphelper::getComponentContext(getMultiServiceFactory()))); + } private: DECL_LINK(getLinkStream, GraphicObject*); private: CPPUNIT_TEST_SUITE(GraphicObjectTest); - CPPUNIT_TEST(testSwap); + CPPUNIT_TEST(testSizeBasedAutoSwap); CPPUNIT_TEST_SUITE_END(); }; @@ -120,6 +141,89 @@ void GraphicObjectTest::testSwap() } } +void GraphicObjectTest::testSizeBasedAutoSwap() +{ + // Set cache size to a very small value to check what happens + { + boost::shared_ptr< comphelper::ConfigurationChanges > aBatch(comphelper::ConfigurationChanges::create()); + officecfg::Office::Common::Cache::GraphicManager::TotalCacheSize::set(sal_Int32(1), aBatch); + aBatch->commit(); + } + + uno::Reference< lang::XComponent > xComponent = + loadFromDesktop(getURLFromSrc("svtools/qa/unit/data/document_with_two_images.odt"), "com.sun.star.text.TextDocument"); + + SwXTextDocument* pTxtDoc = dynamic_cast<SwXTextDocument *>(xComponent.get()); + CPPUNIT_ASSERT(pTxtDoc); + SwDoc* pDoc = pTxtDoc->GetDocShell()->GetDoc(); + CPPUNIT_ASSERT(pDoc); + SwNodes& aNodes = pDoc->GetNodes(); + + // Find images + const GraphicObject* pGrafObj1 = 0; + const GraphicObject* pGrafObj2 = 0; + for( sal_uLong nIndex = 0; nIndex < aNodes.Count(); ++nIndex) + { + if( aNodes[nIndex]->IsGrfNode() ) + { + SwGrfNode* pGrfNode = aNodes[nIndex]->GetGrfNode(); + if( !pGrafObj1 ) + { + pGrafObj1 = &pGrfNode->GetGrfObj(); + } + else + { + pGrafObj2 = &pGrfNode->GetGrfObj(); + } + } + } + CPPUNIT_ASSERT_MESSAGE("Missing image", pGrafObj1 != 0 && pGrafObj2 != 0); + + { + // First image should be swapped out + CPPUNIT_ASSERT(pGrafObj1->IsSwappedOut()); + CPPUNIT_ASSERT_EQUAL(sal_uLong(697230), pGrafObj1->GetSizeBytes()); + + // Still swapped out: size is cached + CPPUNIT_ASSERT(pGrafObj1->IsSwappedOut()); + } + + { + // Second image should be in the memory + // Size based swap out is triggered by swap in, so the last swapped in image should be + // in the memory despite of size limit is reached. + CPPUNIT_ASSERT(!pGrafObj2->IsSwappedOut()); + CPPUNIT_ASSERT_EQUAL(sal_uLong(1620000), pGrafObj2->GetSizeBytes()); + } + + // Swap in first image -> second image will be swapped out + { + pGrafObj1->GetGraphic(); // GetGraphic calls swap in on a const object + CPPUNIT_ASSERT(!pGrafObj1->IsSwappedOut()); + CPPUNIT_ASSERT(pGrafObj2->IsSwappedOut()); + } + + // Swap in second image -> first image will be swapped out + { + pGrafObj2->GetGraphic(); // GetGraphic calls swap in on a const object + CPPUNIT_ASSERT(!pGrafObj2->IsSwappedOut()); + CPPUNIT_ASSERT(pGrafObj1->IsSwappedOut()); + } + + // Use bigger cache + { + GraphicManager& rGrfMgr = pGrafObj1->GetGraphicManager(); + rGrfMgr.SetMaxCacheSize(pGrafObj1->GetSizeBytes()+pGrafObj2->GetSizeBytes()); + } + // Swap in both images -> both should be swapped in + { + pGrafObj1->GetGraphic(); + pGrafObj2->GetGraphic(); + CPPUNIT_ASSERT(!pGrafObj1->IsSwappedOut()); + CPPUNIT_ASSERT(!pGrafObj2->IsSwappedOut()); + } +} + CPPUNIT_TEST_SUITE_REGISTRATION(GraphicObjectTest); } diff --git a/svtools/qa/unit/data/document_with_two_images.odt b/svtools/qa/unit/data/document_with_two_images.odt Binary files differnew file mode 100644 index 000000000000..54d3d666de96 --- /dev/null +++ b/svtools/qa/unit/data/document_with_two_images.odt |