From b40f1d657affbe87f60bfd358199a91c9fea7454 Mon Sep 17 00:00:00 2001 From: Tomaž Vajngerl Date: Fri, 29 May 2020 18:18:40 +0200 Subject: sd: move LOK search tests out of tiledrendering.cxx MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change-Id: I76ff3e251afc877b0dcf54d772da95bb7a60e823 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/95351 Tested-by: Tomaž Vajngerl Reviewed-by: Tomaž Vajngerl --- sd/qa/unit/sdmodeltestbase.hxx | 2 +- sd/qa/unit/tiledrendering/CallbackRecorder.hxx | 142 +++++++++++++++ sd/qa/unit/tiledrendering/LOKitSearchTest.cxx | 233 +++++++++++++++++++++++++ sd/qa/unit/tiledrendering/tiledrendering.cxx | 140 ++------------- 4 files changed, 387 insertions(+), 130 deletions(-) create mode 100644 sd/qa/unit/tiledrendering/CallbackRecorder.hxx create mode 100644 sd/qa/unit/tiledrendering/LOKitSearchTest.cxx (limited to 'sd/qa') diff --git a/sd/qa/unit/sdmodeltestbase.hxx b/sd/qa/unit/sdmodeltestbase.hxx index 9cdb3214f353..6469eba789fe 100644 --- a/sd/qa/unit/sdmodeltestbase.hxx +++ b/sd/qa/unit/sdmodeltestbase.hxx @@ -73,7 +73,7 @@ pFilterName: pTypeName: ... nFormatType: ... */ -FileFormat aFileFormats[] = +static FileFormat aFileFormats[] = { { "odp", "impress8", "impress8", "", ODP_FORMAT_TYPE }, { "ppt", "MS PowerPoint 97", "impress_MS_PowerPoint_97", "sdfilt", PPT_FORMAT_TYPE }, diff --git a/sd/qa/unit/tiledrendering/CallbackRecorder.hxx b/sd/qa/unit/tiledrendering/CallbackRecorder.hxx new file mode 100644 index 000000000000..fc5117cce6dc --- /dev/null +++ b/sd/qa/unit/tiledrendering/CallbackRecorder.hxx @@ -0,0 +1,142 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#pragma once + +#include +#include +#include +#include +#include + +namespace +{ +std::vector lcl_convertSeparated(const OUString& rString, sal_Unicode nSeparator) +{ + std::vector aRet; + + sal_Int32 nIndex = 0; + do + { + OUString aToken = rString.getToken(0, nSeparator, nIndex); + aToken = aToken.trim(); + if (!aToken.isEmpty()) + aRet.push_back(aToken); + } while (nIndex >= 0); + + return aRet; +} + +void lcl_convertRectangle(const OUString& rString, tools::Rectangle& rRectangle) +{ + uno::Sequence aSeq = comphelper::string::convertCommaSeparated(rString); + CPPUNIT_ASSERT(aSeq.getLength() == 4 || aSeq.getLength() == 5); + rRectangle.setX(aSeq[0].toInt32()); + rRectangle.setY(aSeq[1].toInt32()); + rRectangle.setWidth(aSeq[2].toInt32()); + rRectangle.setHeight(aSeq[3].toInt32()); +} +} + +struct CallbackRecorder +{ + CallbackRecorder() + : m_bFound(true) + , m_nPart(0) + , m_nSelectionBeforeSearchResult(0) + , m_nSelectionAfterSearchResult(0) + { + } + + tools::Rectangle m_aInvalidation; + std::vector<::tools::Rectangle> m_aSelection; + bool m_bFound; + sal_Int32 m_nPart; + std::vector m_aSearchResultSelection; + std::vector m_aSearchResultPart; + int m_nSelectionBeforeSearchResult; + int m_nSelectionAfterSearchResult; + /// For document size changed callback. + osl::Condition m_aDocumentSizeCondition; + + static void callback(int nType, const char* pPayload, void* pData) + { + static_cast(pData)->processCallback(nType, pPayload); + } + + void processCallback(int nType, const char* pPayload) + { + switch (nType) + { + case LOK_CALLBACK_INVALIDATE_TILES: + { + OUString aPayload = OUString::createFromAscii(pPayload); + if (aPayload != "EMPTY" && m_aInvalidation.IsEmpty()) + lcl_convertRectangle(aPayload, m_aInvalidation); + } + break; + case LOK_CALLBACK_TEXT_SELECTION: + { + OUString aPayload = OUString::createFromAscii(pPayload); + m_aSelection.clear(); + for (const OUString& rString : lcl_convertSeparated(aPayload, u';')) + { + ::tools::Rectangle aRectangle; + lcl_convertRectangle(rString, aRectangle); + m_aSelection.push_back(aRectangle); + } + if (m_aSearchResultSelection.empty()) + ++m_nSelectionBeforeSearchResult; + else + ++m_nSelectionAfterSearchResult; + } + break; + case LOK_CALLBACK_SEARCH_NOT_FOUND: + { + m_bFound = false; + } + break; + case LOK_CALLBACK_DOCUMENT_SIZE_CHANGED: + { + m_aDocumentSizeCondition.set(); + } + break; + case LOK_CALLBACK_SET_PART: + { + OUString aPayload = OUString::createFromAscii(pPayload); + m_nPart = aPayload.toInt32(); + } + break; + case LOK_CALLBACK_SEARCH_RESULT_SELECTION: + { + m_aSearchResultSelection.clear(); + m_aSearchResultPart.clear(); + boost::property_tree::ptree aTree; + std::stringstream aStream(pPayload); + boost::property_tree::read_json(aStream, aTree); + for (const boost::property_tree::ptree::value_type& rValue : + aTree.get_child("searchResultSelection")) + { + m_aSearchResultSelection.emplace_back( + rValue.second.get("rectangles").c_str()); + m_aSearchResultPart.push_back( + std::atoi(rValue.second.get("part").c_str())); + } + } + break; + } + } + + void registerCallbacksFor(SfxViewShell& rViewShell) + { + rViewShell.registerLibreOfficeKitViewCallback(&CallbackRecorder::callback, this); + } +}; + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sd/qa/unit/tiledrendering/LOKitSearchTest.cxx b/sd/qa/unit/tiledrendering/LOKitSearchTest.cxx new file mode 100644 index 000000000000..4474bd8e4751 --- /dev/null +++ b/sd/qa/unit/tiledrendering/LOKitSearchTest.cxx @@ -0,0 +1,233 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#include "../sdmodeltestbase.hxx" +#include "CallbackRecorder.hxx" + +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +using namespace css; + +class LOKitSearchTest : public SdModelTestBase, public XmlTestTools +{ +private: + static constexpr char DATA_DIRECTORY[] = "/sd/qa/unit/tiledrendering/data/"; + +public: + LOKitSearchTest() {} + + virtual void setUp() override; + virtual void tearDown() override; + + void testSearch(); + void testSearchAll(); + void testSearchAllSelections(); + void testSearchAllNotifications(); + void testSearchAllFollowedBySearch(); + void testDontSearchInMasterPages(); + + CPPUNIT_TEST_SUITE(LOKitSearchTest); + CPPUNIT_TEST(testSearch); + CPPUNIT_TEST(testSearchAll); + CPPUNIT_TEST(testSearchAllSelections); + CPPUNIT_TEST(testSearchAllNotifications); + CPPUNIT_TEST(testSearchAllFollowedBySearch); + CPPUNIT_TEST(testDontSearchInMasterPages); + CPPUNIT_TEST_SUITE_END(); + +private: + SdXImpressDocument* createDoc(const char* pName, + const uno::Sequence& rArguments + = uno::Sequence()); + + uno::Reference mxComponent; + std::unique_ptr mpCallbackRecorder; +}; + +void LOKitSearchTest::setUp() +{ + test::BootstrapFixture::setUp(); + + // prevent showing warning message box + setenv("OOX_NO_SMARTART_WARNING", "1", 1); + comphelper::LibreOfficeKit::setActive(true); + + mxDesktop.set( + css::frame::Desktop::create(comphelper::getComponentContext(getMultiServiceFactory()))); + mpCallbackRecorder = std::make_unique(); +} + +void LOKitSearchTest::tearDown() +{ + if (mxComponent.is()) + mxComponent->dispose(); + + comphelper::LibreOfficeKit::setActive(false); + + test::BootstrapFixture::tearDown(); +} + +SdXImpressDocument* +LOKitSearchTest::createDoc(const char* pName, const uno::Sequence& rArguments) +{ + if (mxComponent.is()) + mxComponent->dispose(); + mxComponent = loadFromDesktop(m_directories.getURLFromSrc(DATA_DIRECTORY) + + OUString::createFromAscii(pName), + "com.sun.star.presentation.PresentationDocument"); + SdXImpressDocument* pImpressDocument = dynamic_cast(mxComponent.get()); + CPPUNIT_ASSERT(pImpressDocument); + pImpressDocument->initializeForTiledRendering(rArguments); + return pImpressDocument; +} + +namespace +{ +void lcl_search(const OUString& rKey, bool bFindAll = false) +{ + uno::Sequence aPropertyValues(comphelper::InitPropertySequence({ + { "SearchItem.SearchString", uno::makeAny(rKey) }, + { "SearchItem.Backward", uno::makeAny(false) }, + { "SearchItem.Command", uno::makeAny(static_cast( + bFindAll ? SvxSearchCmd::FIND_ALL : SvxSearchCmd::FIND)) }, + })); + comphelper::dispatchCommand(".uno:ExecuteSearch", aPropertyValues); +} +} + +void LOKitSearchTest::testSearch() +{ + SdXImpressDocument* pXImpressDocument = createDoc("dummy.odp"); + sd::ViewShell* pViewShell = pXImpressDocument->GetDocShell()->GetViewShell(); + mpCallbackRecorder->registerCallbacksFor(pViewShell->GetViewShellBase()); + uno::Reference xDrawPage( + pXImpressDocument->getDrawPages()->getByIndex(0), uno::UNO_QUERY); + uno::Reference xShape(xDrawPage->getByIndex(0), uno::UNO_QUERY); + xShape->setString("Aaa bbb."); + + lcl_search("bbb"); + + SdrView* pView = pViewShell->GetView(); + EditView& rEditView = pView->GetTextEditOutlinerView()->GetEditView(); + // Did we indeed manage to select the second word? + CPPUNIT_ASSERT_EQUAL(OUString("bbb"), rEditView.GetSelected()); + + // Did the selection callback fire? + CPPUNIT_ASSERT_EQUAL(static_cast(1), mpCallbackRecorder->m_aSelection.size()); + + // Search for something on the second slide, and make sure that the set-part callback fired. + lcl_search("bbb"); + CPPUNIT_ASSERT_EQUAL(static_cast(1), mpCallbackRecorder->m_nPart); + CPPUNIT_ASSERT_EQUAL(true, mpCallbackRecorder->m_bFound); + // This was 0; should be 1 match for "find". + CPPUNIT_ASSERT_EQUAL(static_cast(1), + mpCallbackRecorder->m_aSearchResultSelection.size()); + // Result is on the second slide. + CPPUNIT_ASSERT_EQUAL(1, mpCallbackRecorder->m_aSearchResultPart[0]); + + // This should trigger the not-found callback. + lcl_search("ccc"); + CPPUNIT_ASSERT_EQUAL(false, mpCallbackRecorder->m_bFound); +} + +void LOKitSearchTest::testSearchAll() +{ + SdXImpressDocument* pXImpressDocument = createDoc("search-all.odp"); + sd::ViewShell* pViewShell = pXImpressDocument->GetDocShell()->GetViewShell(); + mpCallbackRecorder->registerCallbacksFor(pViewShell->GetViewShellBase()); + + lcl_search("match", /*bFindAll=*/true); + + // This was empty: find-all did not highlight the first match. + CPPUNIT_ASSERT_EQUAL(OString("match"), + apitest::helper::transferable::getTextSelection( + pXImpressDocument->getSelection(), "text/plain;charset=utf-8")); + + // We're on the first slide, search for something on the second slide and make sure we get a SET_PART. + mpCallbackRecorder->m_nPart = 0; + lcl_search("second", /*bFindAll=*/true); + // This was 0: no SET_PART was emitted. + CPPUNIT_ASSERT_EQUAL(static_cast(1), mpCallbackRecorder->m_nPart); +} + +void LOKitSearchTest::testSearchAllSelections() +{ + SdXImpressDocument* pXImpressDocument = createDoc("search-all.odp"); + sd::ViewShell* pViewShell = pXImpressDocument->GetDocShell()->GetViewShell(); + mpCallbackRecorder->registerCallbacksFor(pViewShell->GetViewShellBase()); + + lcl_search("third", /*bFindAll=*/true); + // Make sure this is found on the 3rd slide. + CPPUNIT_ASSERT_EQUAL(static_cast(2), mpCallbackRecorder->m_nPart); + // This was 1: only the first match was highlighted. + CPPUNIT_ASSERT_EQUAL(static_cast(2), mpCallbackRecorder->m_aSelection.size()); +} + +void LOKitSearchTest::testSearchAllNotifications() +{ + SdXImpressDocument* pXImpressDocument = createDoc("search-all.odp"); + sd::ViewShell* pViewShell = pXImpressDocument->GetDocShell()->GetViewShell(); + mpCallbackRecorder->registerCallbacksFor(pViewShell->GetViewShellBase()); + + lcl_search("third", /*bFindAll=*/true); + // Make sure that we get no notifications about selection changes during search. + CPPUNIT_ASSERT_EQUAL(0, mpCallbackRecorder->m_nSelectionBeforeSearchResult); + // But we do get the selection of the first hit. + CPPUNIT_ASSERT(mpCallbackRecorder->m_nSelectionAfterSearchResult > 0); +} + +void LOKitSearchTest::testSearchAllFollowedBySearch() +{ + SdXImpressDocument* pXImpressDocument = createDoc("search-all.odp"); + sd::ViewShell* pViewShell = pXImpressDocument->GetDocShell()->GetViewShell(); + mpCallbackRecorder->registerCallbacksFor(pViewShell->GetViewShellBase()); + + lcl_search("third", /*bFindAll=*/true); + lcl_search("match" /*,bFindAll=false*/); + + // This used to give wrong result: 'search' after 'search all' still + // returned 'third' + CPPUNIT_ASSERT_EQUAL(OString("match"), + apitest::helper::transferable::getTextSelection( + pXImpressDocument->getSelection(), "text/plain;charset=utf-8")); +} + +void LOKitSearchTest::testDontSearchInMasterPages() +{ + SdXImpressDocument* pXImpressDocument = createDoc("dummy.odp"); + sd::ViewShell* pViewShell = pXImpressDocument->GetDocShell()->GetViewShell(); + mpCallbackRecorder->registerCallbacksFor(pViewShell->GetViewShellBase()); + + // This should trigger the not-found callback ("date" is present only on + // the master page) + lcl_search("date"); + CPPUNIT_ASSERT_EQUAL(false, mpCallbackRecorder->m_bFound); +} + +CPPUNIT_TEST_SUITE_REGISTRATION(LOKitSearchTest); + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sd/qa/unit/tiledrendering/tiledrendering.cxx b/sd/qa/unit/tiledrendering/tiledrendering.cxx index 2bd405ff6b26..e2f88363bc48 100644 --- a/sd/qa/unit/tiledrendering/tiledrendering.cxx +++ b/sd/qa/unit/tiledrendering/tiledrendering.cxx @@ -59,7 +59,10 @@ using namespace css; -static char const DATA_DIRECTORY[] = "/sd/qa/unit/tiledrendering/data/"; +namespace +{ + char const DATA_DIRECTORY[] = "/sd/qa/unit/tiledrendering/data/"; +} static std::ostream& operator<<(std::ostream& os, ViewShellId id) { @@ -84,12 +87,6 @@ public: void testSetGraphicSelection(); void testUndoShells(); void testResetSelection(); - void testSearch(); - void testSearchAll(); - void testSearchAllSelections(); - void testSearchAllNotifications(); - void testSearchAllFollowedBySearch(); - void testDontSearchInMasterPages(); void testInsertDeletePage(); void testInsertTable(); void testPartHash(); @@ -140,12 +137,6 @@ public: CPPUNIT_TEST(testSetGraphicSelection); CPPUNIT_TEST(testUndoShells); CPPUNIT_TEST(testResetSelection); - CPPUNIT_TEST(testSearch); - CPPUNIT_TEST(testSearchAll); - CPPUNIT_TEST(testSearchAllSelections); - CPPUNIT_TEST(testSearchAllNotifications); - CPPUNIT_TEST(testSearchAllFollowedBySearch); - CPPUNIT_TEST(testDontSearchInMasterPages); CPPUNIT_TEST(testInsertDeletePage); CPPUNIT_TEST(testInsertTable); CPPUNIT_TEST(testPartHash); @@ -257,7 +248,10 @@ void SdTiledRenderingTest::callback(int nType, const char* pPayload, void* pData static_cast(pData)->callbackImpl(nType, pPayload); } -static std::vector lcl_convertSeparated(const OUString& rString, sal_Unicode nSeparator) +namespace +{ + +std::vector lcl_convertSeparated(const OUString& rString, sal_Unicode nSeparator) { std::vector aRet; @@ -274,7 +268,7 @@ static std::vector lcl_convertSeparated(const OUString& rString, sal_U return aRet; } -static void lcl_convertRectangle(const OUString& rString, ::tools::Rectangle& rRectangle) +void lcl_convertRectangle(const OUString& rString, ::tools::Rectangle& rRectangle) { uno::Sequence aSeq = comphelper::string::convertCommaSeparated(rString); CPPUNIT_ASSERT(aSeq.getLength() == 4 || aSeq.getLength() == 5); @@ -284,6 +278,8 @@ static void lcl_convertRectangle(const OUString& rString, ::tools::Rectangle& rR rRectangle.setHeight(aSeq[3].toInt32()); } +} // end anonymouse namespace + void SdTiledRenderingTest::callbackImpl(int nType, const char* pPayload) { switch (nType) @@ -590,120 +586,6 @@ void SdTiledRenderingTest::testResetSelection() CPPUNIT_ASSERT(!pView->GetTextEditObject()); } -static void lcl_search(const OUString& rKey, bool bFindAll = false) -{ - uno::Sequence aPropertyValues(comphelper::InitPropertySequence( - { - {"SearchItem.SearchString", uno::makeAny(rKey)}, - {"SearchItem.Backward", uno::makeAny(false)}, - {"SearchItem.Command", uno::makeAny(static_cast(bFindAll ? SvxSearchCmd::FIND_ALL : SvxSearchCmd::FIND))}, - })); - comphelper::dispatchCommand(".uno:ExecuteSearch", aPropertyValues); -} - -void SdTiledRenderingTest::testSearch() -{ - SdXImpressDocument* pXImpressDocument = createDoc("dummy.odp"); - sd::ViewShell* pViewShell = pXImpressDocument->GetDocShell()->GetViewShell(); - pViewShell->GetViewShellBase().registerLibreOfficeKitViewCallback(&SdTiledRenderingTest::callback, this); - uno::Reference xDrawPage(pXImpressDocument->getDrawPages()->getByIndex(0), uno::UNO_QUERY); - uno::Reference xShape(xDrawPage->getByIndex(0), uno::UNO_QUERY); - xShape->setString("Aaa bbb."); - - lcl_search("bbb"); - - SdrView* pView = pViewShell->GetView(); - EditView& rEditView = pView->GetTextEditOutlinerView()->GetEditView(); - // Did we indeed manage to select the second word? - CPPUNIT_ASSERT_EQUAL(OUString("bbb"), rEditView.GetSelected()); - - // Did the selection callback fire? - CPPUNIT_ASSERT_EQUAL(static_cast(1), m_aSelection.size()); - - // Search for something on the second slide, and make sure that the set-part callback fired. - lcl_search("bbb"); - CPPUNIT_ASSERT_EQUAL(static_cast(1), m_nPart); - CPPUNIT_ASSERT_EQUAL(true, m_bFound); - // This was 0; should be 1 match for "find". - CPPUNIT_ASSERT_EQUAL(static_cast(1), m_aSearchResultSelection.size()); - // Result is on the second slide. - CPPUNIT_ASSERT_EQUAL(1, m_aSearchResultPart[0]); - - // This should trigger the not-found callback. - lcl_search("ccc"); - CPPUNIT_ASSERT_EQUAL(false, m_bFound); -} - -void SdTiledRenderingTest::testSearchAll() -{ - SdXImpressDocument* pXImpressDocument = createDoc("search-all.odp"); - sd::ViewShell* pViewShell = pXImpressDocument->GetDocShell()->GetViewShell(); - pViewShell->GetViewShellBase().registerLibreOfficeKitViewCallback(&SdTiledRenderingTest::callback, this); - - lcl_search("match", /*bFindAll=*/true); - - // This was empty: find-all did not highlight the first match. - CPPUNIT_ASSERT_EQUAL(OString("match"), apitest::helper::transferable::getTextSelection(pXImpressDocument->getSelection(), "text/plain;charset=utf-8")); - - // We're on the first slide, search for something on the second slide and make sure we get a SET_PART. - m_nPart = 0; - lcl_search("second", /*bFindAll=*/true); - // This was 0: no SET_PART was emitted. - CPPUNIT_ASSERT_EQUAL(static_cast(1), m_nPart); -} - -void SdTiledRenderingTest::testSearchAllSelections() -{ - SdXImpressDocument* pXImpressDocument = createDoc("search-all.odp"); - sd::ViewShell* pViewShell = pXImpressDocument->GetDocShell()->GetViewShell(); - pViewShell->GetViewShellBase().registerLibreOfficeKitViewCallback(&SdTiledRenderingTest::callback, this); - - lcl_search("third", /*bFindAll=*/true); - // Make sure this is found on the 3rd slide. - CPPUNIT_ASSERT_EQUAL(static_cast(2), m_nPart); - // This was 1: only the first match was highlighted. - CPPUNIT_ASSERT_EQUAL(static_cast(2), m_aSelection.size()); -} - -void SdTiledRenderingTest::testSearchAllNotifications() -{ - SdXImpressDocument* pXImpressDocument = createDoc("search-all.odp"); - sd::ViewShell* pViewShell = pXImpressDocument->GetDocShell()->GetViewShell(); - pViewShell->GetViewShellBase().registerLibreOfficeKitViewCallback(&SdTiledRenderingTest::callback, this); - - lcl_search("third", /*bFindAll=*/true); - // Make sure that we get no notifications about selection changes during search. - CPPUNIT_ASSERT_EQUAL(0, m_nSelectionBeforeSearchResult); - // But we do get the selection of the first hit. - CPPUNIT_ASSERT(m_nSelectionAfterSearchResult > 0); -} - -void SdTiledRenderingTest::testSearchAllFollowedBySearch() -{ - SdXImpressDocument* pXImpressDocument = createDoc("search-all.odp"); - sd::ViewShell* pViewShell = pXImpressDocument->GetDocShell()->GetViewShell(); - pViewShell->GetViewShellBase().registerLibreOfficeKitViewCallback(&SdTiledRenderingTest::callback, this); - - lcl_search("third", /*bFindAll=*/true); - lcl_search("match" /*,bFindAll=false*/); - - // This used to give wrong result: 'search' after 'search all' still - // returned 'third' - CPPUNIT_ASSERT_EQUAL(OString("match"), apitest::helper::transferable::getTextSelection(pXImpressDocument->getSelection(), "text/plain;charset=utf-8")); -} - -void SdTiledRenderingTest::testDontSearchInMasterPages() -{ - SdXImpressDocument* pXImpressDocument = createDoc("dummy.odp"); - sd::ViewShell* pViewShell = pXImpressDocument->GetDocShell()->GetViewShell(); - pViewShell->GetViewShellBase().registerLibreOfficeKitViewCallback(&SdTiledRenderingTest::callback, this); - - // This should trigger the not-found callback ("date" is present only on - // the master page) - lcl_search("date"); - CPPUNIT_ASSERT_EQUAL(false, m_bFound); -} - namespace { -- cgit