Change-Id: Ie9d88c15af13fb481bb48c838b3b0ef2f41f11e7 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/168512 Tested-by: Jenkins Reviewed-by: Tomaž Vajngerl <quikee@gmail.com>
199 lines
7.4 KiB
C++
199 lines
7.4 KiB
C++
/* -*- 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 <test/unoapi_test.hxx>
|
|
|
|
#include <com/sun/star/beans/XPropertySet.hpp>
|
|
#include <com/sun/star/text/XTextRange.hpp>
|
|
|
|
#include <comphelper/propertysequence.hxx>
|
|
#include <vcl/scheduler.hxx>
|
|
#include <svx/unoapi.hxx>
|
|
#include <svx/annotation/Annotation.hxx>
|
|
#include <svx/svdorect.hxx>
|
|
#include <svx/svdview.hxx>
|
|
|
|
#include <DrawDocShell.hxx>
|
|
#include <unomodel.hxx>
|
|
#include <sdpage.hxx>
|
|
#include <ViewShell.hxx>
|
|
|
|
using namespace css;
|
|
|
|
class AnnotationTest : public SdModelTestBase
|
|
{
|
|
public:
|
|
AnnotationTest()
|
|
: SdModelTestBase("/sd/qa/unit/data/")
|
|
{
|
|
}
|
|
};
|
|
|
|
CPPUNIT_TEST_FIXTURE(AnnotationTest, testAnnotation)
|
|
{
|
|
createSdDrawDoc();
|
|
|
|
auto pXImpressDocument = dynamic_cast<SdXImpressDocument*>(mxComponent.get());
|
|
sd::ViewShell* pViewShell = pXImpressDocument->GetDocShell()->GetViewShell();
|
|
|
|
SdPage* pPage = pViewShell->GetActualPage();
|
|
CPPUNIT_ASSERT_EQUAL(size_t(0), pPage->GetObjCount());
|
|
|
|
{
|
|
rtl::Reference<sdr::annotation::Annotation> xAnnotation = pPage->createAnnotation();
|
|
CPPUNIT_ASSERT_EQUAL(size_t(0), pPage->GetObjCount());
|
|
|
|
xAnnotation->setAuthor("A");
|
|
uno::Reference<text::XText> xText(xAnnotation->getTextRange());
|
|
xText->setString("X");
|
|
|
|
xAnnotation->setPosition(geometry::RealPoint2D(0.0, 0.0));
|
|
xAnnotation->setSize(geometry::RealSize2D(10.0, 10.0));
|
|
|
|
pPage->addAnnotation(xAnnotation, -1);
|
|
|
|
CPPUNIT_ASSERT_EQUAL(size_t(1), pPage->getAnnotations().size());
|
|
CPPUNIT_ASSERT_EQUAL(size_t(1), pPage->GetObjCount());
|
|
}
|
|
|
|
SdrObject* pObject = pPage->GetObj(0);
|
|
CPPUNIT_ASSERT_EQUAL(SdrObjKind::Annotation, pObject->GetObjIdentifier());
|
|
|
|
{
|
|
rtl::Reference<sdr::annotation::Annotation> xAnnotation = pPage->createAnnotation();
|
|
CPPUNIT_ASSERT_EQUAL(size_t(1), pPage->GetObjCount());
|
|
|
|
xAnnotation->setAuthor("B");
|
|
uno::Reference<text::XText> xText(xAnnotation->getTextRange());
|
|
xText->setString("XXX");
|
|
|
|
xAnnotation->setPosition(geometry::RealPoint2D(10.0, 10.0));
|
|
xAnnotation->setSize(geometry::RealSize2D(10.0, 10.0));
|
|
sdr::annotation::CreationInfo aInfo;
|
|
aInfo.meType = sdr::annotation::AnnotationType::Square;
|
|
aInfo.maColor = COL_LIGHTRED;
|
|
xAnnotation->setCreationInfo(aInfo);
|
|
|
|
pPage->addAnnotation(xAnnotation, -1);
|
|
|
|
CPPUNIT_ASSERT_EQUAL(size_t(2), pPage->getAnnotations().size());
|
|
CPPUNIT_ASSERT_EQUAL(size_t(2), pPage->GetObjCount());
|
|
}
|
|
}
|
|
|
|
CPPUNIT_TEST_FIXTURE(AnnotationTest, testAnnotationInsert)
|
|
{
|
|
createSdDrawDoc();
|
|
|
|
auto pXImpressDocument = dynamic_cast<SdXImpressDocument*>(mxComponent.get());
|
|
sd::ViewShell* pViewShell = pXImpressDocument->GetDocShell()->GetViewShell();
|
|
|
|
SdPage* pPage = pViewShell->GetActualPage();
|
|
CPPUNIT_ASSERT_EQUAL(size_t(0), pPage->GetObjCount());
|
|
|
|
dispatchCommand(mxComponent, ".uno:InsertAnnotation", {});
|
|
Scheduler::ProcessEventsToIdle();
|
|
|
|
CPPUNIT_ASSERT_EQUAL(size_t(1), pPage->GetObjCount());
|
|
CPPUNIT_ASSERT_EQUAL(size_t(1), pPage->getAnnotations().size());
|
|
}
|
|
|
|
CPPUNIT_TEST_FIXTURE(AnnotationTest, testAnnotationDelete)
|
|
{
|
|
createSdDrawDoc();
|
|
|
|
auto pXImpressDocument = dynamic_cast<SdXImpressDocument*>(mxComponent.get());
|
|
sd::ViewShell* pViewShell = pXImpressDocument->GetDocShell()->GetViewShell();
|
|
|
|
SdPage* pPage = pViewShell->GetActualPage();
|
|
CPPUNIT_ASSERT_EQUAL(size_t(0), pPage->GetObjCount());
|
|
|
|
dispatchCommand(mxComponent, ".uno:InsertAnnotation", {});
|
|
dispatchCommand(mxComponent, ".uno:InsertAnnotation", {});
|
|
dispatchCommand(mxComponent, ".uno:InsertAnnotation", {});
|
|
Scheduler::ProcessEventsToIdle();
|
|
|
|
CPPUNIT_ASSERT_EQUAL(size_t(3), pPage->GetObjCount());
|
|
|
|
sal_uInt32 nID = pPage->getAnnotations().front()->GetId();
|
|
|
|
CPPUNIT_ASSERT_EQUAL(size_t(3), pPage->getAnnotations().size());
|
|
CPPUNIT_ASSERT_EQUAL(sal_uInt32(nID + 0), pPage->getAnnotations().at(0)->GetId());
|
|
CPPUNIT_ASSERT_EQUAL(sal_uInt32(nID + 1), pPage->getAnnotations().at(1)->GetId());
|
|
CPPUNIT_ASSERT_EQUAL(sal_uInt32(nID + 2), pPage->getAnnotations().at(2)->GetId());
|
|
|
|
auto xAnnotation = pPage->getAnnotations().at(1);
|
|
|
|
uno::Sequence<beans::PropertyValue> aPropertyValues(comphelper::InitPropertySequence({
|
|
{ "Id", uno::Any(OUString::number(xAnnotation->GetId())) },
|
|
}));
|
|
dispatchCommand(mxComponent, ".uno:DeleteAnnotation", aPropertyValues);
|
|
Scheduler::ProcessEventsToIdle();
|
|
|
|
CPPUNIT_ASSERT_EQUAL(size_t(2), pPage->GetObjCount());
|
|
CPPUNIT_ASSERT_EQUAL(size_t(2), pPage->getAnnotations().size());
|
|
|
|
CPPUNIT_ASSERT_EQUAL(sal_uInt32(nID + 0), pPage->getAnnotations().at(0)->GetId());
|
|
CPPUNIT_ASSERT_EQUAL(sal_uInt32(nID + 2), pPage->getAnnotations().at(1)->GetId());
|
|
}
|
|
|
|
CPPUNIT_TEST_FIXTURE(AnnotationTest, testAnnotationInsertUndoRedo)
|
|
{
|
|
createSdDrawDoc();
|
|
|
|
auto pXImpressDocument = dynamic_cast<SdXImpressDocument*>(mxComponent.get());
|
|
sd::ViewShell* pViewShell = pXImpressDocument->GetDocShell()->GetViewShell();
|
|
|
|
SdPage* pPage = pViewShell->GetActualPage();
|
|
CPPUNIT_ASSERT_EQUAL(size_t(0), pPage->GetObjCount());
|
|
|
|
dispatchCommand(mxComponent, ".uno:InsertAnnotation", {});
|
|
dispatchCommand(mxComponent, ".uno:InsertAnnotation", {});
|
|
Scheduler::ProcessEventsToIdle();
|
|
|
|
CPPUNIT_ASSERT_EQUAL(size_t(2), pPage->GetObjCount());
|
|
SdrObject* pObject = pPage->GetObj(0);
|
|
CPPUNIT_ASSERT_EQUAL(SdrObjKind::Annotation, pObject->GetObjIdentifier());
|
|
|
|
sal_uInt32 nID = pPage->getAnnotations().front()->GetId();
|
|
|
|
CPPUNIT_ASSERT_EQUAL(sal_uInt32(nID + 0), pPage->getAnnotations().at(0)->GetId());
|
|
CPPUNIT_ASSERT_EQUAL(sal_uInt32(nID + 1), pPage->getAnnotations().at(1)->GetId());
|
|
|
|
dispatchCommand(mxComponent, ".uno:Undo", {});
|
|
CPPUNIT_ASSERT_EQUAL(size_t(1), pPage->GetObjCount());
|
|
CPPUNIT_ASSERT_EQUAL(size_t(1), pPage->getAnnotations().size());
|
|
CPPUNIT_ASSERT_EQUAL(sal_uInt32(nID + 0), pPage->getAnnotations().at(0)->GetId());
|
|
|
|
dispatchCommand(mxComponent, ".uno:Redo", {});
|
|
CPPUNIT_ASSERT_EQUAL(size_t(2), pPage->GetObjCount());
|
|
CPPUNIT_ASSERT_EQUAL(size_t(2), pPage->getAnnotations().size());
|
|
CPPUNIT_ASSERT_EQUAL(sal_uInt32(nID + 0), pPage->getAnnotations().at(0)->GetId());
|
|
CPPUNIT_ASSERT_EQUAL(sal_uInt32(nID + 1), pPage->getAnnotations().at(1)->GetId());
|
|
|
|
dispatchCommand(mxComponent, ".uno:DeleteAnnotation", {});
|
|
Scheduler::ProcessEventsToIdle();
|
|
CPPUNIT_ASSERT_EQUAL(size_t(1), pPage->GetObjCount());
|
|
CPPUNIT_ASSERT_EQUAL(size_t(1), pPage->getAnnotations().size());
|
|
CPPUNIT_ASSERT_EQUAL(sal_uInt32(nID + 0), pPage->getAnnotations().at(0)->GetId());
|
|
|
|
dispatchCommand(mxComponent, ".uno:Undo", {});
|
|
Scheduler::ProcessEventsToIdle();
|
|
CPPUNIT_ASSERT_EQUAL(size_t(2), pPage->GetObjCount());
|
|
CPPUNIT_ASSERT_EQUAL(size_t(2), pPage->getAnnotations().size());
|
|
CPPUNIT_ASSERT_EQUAL(sal_uInt32(nID + 0), pPage->getAnnotations().at(0)->GetId());
|
|
CPPUNIT_ASSERT_EQUAL(sal_uInt32(nID + 1), pPage->getAnnotations().at(1)->GetId());
|
|
}
|
|
|
|
CPPUNIT_PLUGIN_IMPLEMENT();
|
|
|
|
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|