Kaydet (Commit) c8b68f7d authored tarafından Regina Henschel's avatar Regina Henschel Kaydeden (comit) Thorsten Behrens

tdf#119956 unit test, LayerTabBar, adapt focus if Alt+Click

The test simulates Alt+Click and checks which tab is current.
Some methods have been exported, so that they can be used in
the test. The test classes have been changed to get an odg
document really opened in Draw.

Change-Id: I6ece8594f297c48c862693ead049e6e1f9edbc31
Reviewed-on: https://gerrit.libreoffice.org/61545
Tested-by: Jenkins
Reviewed-by: 's avatarRegina Henschel <rb.henschel@t-online.de>
Reviewed-by: 's avatarThorsten Behrens <Thorsten.Behrens@CIB.de>
Tested-by: 's avatarThorsten Behrens <Thorsten.Behrens@CIB.de>
üst 78313ade
......@@ -20,6 +20,7 @@
#include <com/sun/star/frame/XModel2.hpp>
#include <com/sun/star/awt/Gradient.hpp>
#include <com/sun/star/awt/PosSize.hpp>
#include <com/sun/star/drawing/FillStyle.hpp>
#include <com/sun/star/drawing/XDrawPagesSupplier.hpp>
#include <com/sun/star/drawing/XDrawPages.hpp>
......@@ -46,10 +47,17 @@
#include <controller/SlsClipboard.hxx>
#include <controller/SlsPageSelector.hxx>
#include <undo/undomanager.hxx>
#include <DrawViewShell.hxx>
#include <GraphicViewShell.hxx>
#include <chrono>
#include <sdpage.hxx>
#include <comphelper/base64.hxx>
#include <toolkit/helper/vclunohelper.hxx>
#include <LayerTabBar.hxx>
#include <vcl/window.hxx>
#include <vcl/event.hxx>
#include <vcl/keycodes.hxx>
using namespace ::com::sun::star;
......@@ -68,6 +76,7 @@ public:
void testTdf101242_settings();
void testTdf119392();
void testTdf67248();
void testTdf119956();
CPPUNIT_TEST_SUITE(SdMiscTest);
CPPUNIT_TEST(testTdf96206);
......@@ -81,6 +90,7 @@ public:
CPPUNIT_TEST(testTdf101242_settings);
CPPUNIT_TEST(testTdf119392);
CPPUNIT_TEST(testTdf67248);
CPPUNIT_TEST(testTdf119956);
CPPUNIT_TEST_SUITE_END();
virtual void registerNamespaces(xmlXPathContextPtr& pXmlXPathCtx) override
......@@ -118,6 +128,17 @@ sd::DrawDocShellRef SdMiscTest::Load(const OUString& rURL, sal_Int32 nFormat)
uno::Reference< frame::XFrame > xTargetFrame = xDesktop->findFrame("_blank", 0);
CPPUNIT_ASSERT(xTargetFrame.is());
// This ContainerWindow corresponds to the outermost window of a running LibreOffice.
// It needs a non-zero size and must be shown. Otherwise visible elements like the
// LayerTabBar in Draw have zero size and cannot get mouse events.
// The here used size is freely chosen.
uno::Reference<awt::XWindow> xContainerWindow = xTargetFrame->getContainerWindow();
CPPUNIT_ASSERT(xContainerWindow.is());
xContainerWindow->setPosSize(0, 0, 1024, 768, awt::PosSize::SIZE);
VclPtr<vcl::Window> pContainerWindow = VCLUnoHelper::GetWindow(xContainerWindow);
CPPUNIT_ASSERT(pContainerWindow);
pContainerWindow->Show(true);
// 1. Open the document
sd::DrawDocShellRef xDocSh = loadURL(rURL, nFormat);
CPPUNIT_ASSERT_MESSAGE("Failed to load file.", xDocSh.is());
......@@ -137,16 +158,27 @@ sd::DrawDocShellRef SdMiscTest::Load(const OUString& rURL, sal_Int32 nFormat)
sd::ViewShell *pViewShell = xDocSh->GetViewShell();
CPPUNIT_ASSERT(pViewShell);
sd::slidesorter::SlideSorterViewShell* pSSVS = nullptr;
for (int i = 0; i < 1000; i++)
// Draw has no slidesorter, Impress never shows a LayerTabBar
if (sd::ViewShell::ST_DRAW == pViewShell->GetShellType())
{
// Process all Tasks - slide sorter is created here
while (Scheduler::ProcessTaskScheduling());
if ((pSSVS = sd::slidesorter::SlideSorterViewShell::GetSlideSorter(pViewShell->GetViewShellBase())) != nullptr)
break;
osl::Thread::wait(std::chrono::milliseconds(100));
sd::LayerTabBar* pLayerTabBar = static_cast<sd::GraphicViewShell*>(pViewShell)->GetLayerTabControl();
CPPUNIT_ASSERT(pLayerTabBar);
pLayerTabBar->StateChanged(StateChangedType::InitShow);
}
else
{
sd::slidesorter::SlideSorterViewShell* pSSVS = nullptr;
for (int i = 0; i < 1000; i++)
{
// Process all Tasks - slide sorter is created here
while (Scheduler::ProcessTaskScheduling());
if ((pSSVS = sd::slidesorter::SlideSorterViewShell::GetSlideSorter(pViewShell->GetViewShellBase())) != nullptr)
break;
osl::Thread::wait(std::chrono::milliseconds(100));
}
CPPUNIT_ASSERT(pSSVS);
}
CPPUNIT_ASSERT(pSSVS);
return xDocSh;
}
......@@ -497,7 +529,7 @@ void SdMiscTest::testTdf119392()
// Loads a document which has two user layers "V--" and "V-L". Inserts a new layer "-P-" between them.
// Checks, that the bitfields in the saved file have the bits in the correct order.
sd::DrawDocShellRef xDocShRef = Load(m_directories.getURLFromSrc("/sd/qa/unit/data/tdf119392_InsertLayer.odg"), ODG);
sd::DrawDocShellRef xDocShRef = Load(m_directories.getURLFromSrc("sd/qa/unit/data/tdf119392_InsertLayer.odg"), ODG);
CPPUNIT_ASSERT_MESSAGE("Failed to load file.", xDocShRef.is());
// Insert layer "-P-", not visible, printable, not locked
SdrView* pView = xDocShRef -> GetViewShell()->GetView();
......@@ -542,7 +574,7 @@ void SdMiscTest::testTdf67248()
// The document tdf67248.odg has been created with a German UI. It has a user layer named "Background".
// On opening the user layer must still exists. The error was, that it was merged into the standard
// layer "background".
sd::DrawDocShellRef xDocShRef = Load(m_directories.getURLFromSrc("/sd/qa/unit/data/tdf67248.odg"), ODG);
sd::DrawDocShellRef xDocShRef = Load(m_directories.getURLFromSrc("sd/qa/unit/data/tdf67248.odg"), ODG);
CPPUNIT_ASSERT_MESSAGE("Failed to load file.", xDocShRef.is());
SdrLayerAdmin& rLayerAdmin = xDocShRef->GetDoc()->GetLayerAdmin();
CPPUNIT_ASSERT_EQUAL( sal_uInt16(6), rLayerAdmin.GetLayerCount());
......@@ -550,6 +582,44 @@ void SdMiscTest::testTdf67248()
xDocShRef->DoClose();
}
void SdMiscTest::testTdf119956()
{
sd::DrawDocShellRef xDocShRef = Load(m_directories.getURLFromSrc("sd/qa/unit/data/tdf119956.odg"), ODG);
CPPUNIT_ASSERT_MESSAGE("Failed to load file.", xDocShRef.is());
sd::GraphicViewShell* pGraphicViewShell = static_cast<sd::GraphicViewShell*>(xDocShRef -> GetViewShell());
CPPUNIT_ASSERT(pGraphicViewShell);
sd::LayerTabBar* pLayerTabBar = pGraphicViewShell->GetLayerTabControl();
CPPUNIT_ASSERT(pLayerTabBar);
// Alt+Click sets a tab in edit mode, so that you can rename it.
// The error was, that Alt+Click on a tab, which was not the current tab, did not set the clicked tab
// as current tab. As a result, the entered text was applied to the wrong tab.
// The test document has the layer tabs "layout", "controls", "measurelines" and "Layer4" in this order
// The "pagePos" is 0, 1, 2, 3
// Make sure, that tab "layout" is the current tab.
MouseEvent aSyntheticMouseEvent;
if (pLayerTabBar->GetCurPagePos() != 0)
{
sal_uInt16 nIdOfTabPos0(pLayerTabBar->GetPageId(0));
tools::Rectangle aTabPos0Rect(pLayerTabBar->GetPageRect(nIdOfTabPos0));
aSyntheticMouseEvent = MouseEvent(aTabPos0Rect.Center(), 1, MouseEventModifiers::SYNTHETIC, MOUSE_LEFT, 0);
pLayerTabBar->MouseButtonDown(aSyntheticMouseEvent);
}
CPPUNIT_ASSERT_EQUAL(sal_uInt16(0), pLayerTabBar->GetCurPagePos());
// Alt+Click on tab "Layer4"
sal_uInt16 nIdOfTabPos3(pLayerTabBar->GetPageId(3));
tools::Rectangle aTabPos3Rect(pLayerTabBar->GetPageRect(nIdOfTabPos3));
aSyntheticMouseEvent = MouseEvent(aTabPos3Rect.Center(), 1, MouseEventModifiers::SYNTHETIC, MOUSE_LEFT, KEY_MOD2);
pLayerTabBar->MouseButtonDown(aSyntheticMouseEvent);
// Make sure, tab 3 is current tab now.
CPPUNIT_ASSERT_EQUAL(sal_uInt16(3), pLayerTabBar->GetCurPagePos());
xDocShRef->DoClose();
}
CPPUNIT_TEST_SUITE_REGISTRATION(SdMiscTest);
CPPUNIT_PLUGIN_IMPLEMENT();
......
......@@ -20,6 +20,7 @@
#include <drawdoc.hxx>
#include <DrawDocShell.hxx>
#include <GraphicDocShell.hxx>
#include <unotools/tempfile.hxx>
#include <unotools/ucbstreamhelper.hxx>
#include <tools/color.hxx>
......@@ -147,7 +148,7 @@ protected:
pFilter->SetVersion(SOFFICE_FILEFORMAT_CURRENT);
std::shared_ptr<const SfxFilter> pFilt(pFilter);
::sd::DrawDocShellRef xDocShRef = new ::sd::DrawDocShell(SfxObjectCreateMode::EMBEDDED, false, DocumentType::Draw);
::sd::DrawDocShellRef xDocShRef = new ::sd::GraphicDocShell(SfxObjectCreateMode::EMBEDDED);
SfxMedium* pSrcMed = new SfxMedium(rURL, StreamMode::STD_READ, pFilt, std::move(pParams));
if ( !xDocShRef->DoLoad(pSrcMed) || !xDocShRef.is() )
{
......
......@@ -28,6 +28,7 @@
#include <pres.hxx>
#include <unotools/caserotate.hxx>
#include <unotools/options.hxx>
#include <sddllapi.h>
namespace svx { namespace sidebar { class SelectionChangeHandler; } }
namespace com { namespace sun { namespace star { namespace lang { class XEventListener; } } } }
......@@ -338,7 +339,7 @@ public:
/** Return a pointer to the tab control for layers.
*/
LayerTabBar* GetLayerTabControl();
SD_DLLPUBLIC LayerTabBar* GetLayerTabControl(); // export for unit test
/** Renames the given slide using an SvxNameDialog
......
......@@ -25,13 +25,14 @@
#include "DrawDocShell.hxx"
#include <glob.hxx>
#include <pres.hxx>
#include <sddllapi.h>
namespace sd {
/**
* document shell for draw documents
*/
class GraphicDocShell
class SD_DLLPUBLIC GraphicDocShell
: public DrawDocShell
{
public:
......
......@@ -22,6 +22,7 @@
#include <svtools/tabbar.hxx>
#include <svtools/transfer.hxx>
#include <sddllapi.h>
namespace sd {
......@@ -74,13 +75,11 @@ public:
// otherwise it returns value of rName.
static OUString convertToLocalizedName(const OUString& rName);
private:
DrawViewShell* pDrViewSh;
// TabBar
virtual void Select() override;
virtual void DoubleClick() override;
virtual void MouseButtonDown(const MouseEvent& rMEvt) override;
SD_DLLPUBLIC virtual void MouseButtonDown(const MouseEvent& rMEvt) override; // export for unit test
virtual void Command(const CommandEvent& rCEvt) override;
......@@ -94,6 +93,9 @@ private:
virtual sal_Int8 AcceptDrop( const AcceptDropEvent& rEvt ) override;
virtual sal_Int8 ExecuteDrop( const ExecuteDropEvent& rEvt ) override;
private:
DrawViewShell* pDrViewSh;
// Expects not-localized, real layer name in rText and writes it to maAuxiliaryText.
void SetLayerName( sal_uInt16 nPageId, const OUString& rText );
};
......
......@@ -354,7 +354,7 @@ public:
/** Return the type of the shell.
*/
ShellType GetShellType() const;
SD_DLLPUBLIC ShellType GetShellType() const; //Export for unit test
/** This method is more or less an alias to Deactivate(). It is called
before an object of this class is taken from the stack of view
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment