2020-02-27 11:41:24 +01:00
|
|
|
/* -*- 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 <swmodeltestbase.hxx>
|
2020-03-05 22:15:23 +01:00
|
|
|
#include <LibreOfficeKit/LibreOfficeKitEnums.h>
|
|
|
|
#include <vcl/scheduler.hxx>
|
2020-03-09 11:13:32 +01:00
|
|
|
#include <com/sun/star/text/TextContentAnchorType.hpp>
|
2020-04-03 13:12:51 +02:00
|
|
|
#include <comphelper/propertysequence.hxx>
|
2020-05-05 19:27:58 +02:00
|
|
|
#include <boost/property_tree/json_parser.hpp>
|
2020-05-26 10:09:51 +02:00
|
|
|
#include <frameformats.hxx>
|
|
|
|
#include <textboxhelper.hxx>
|
|
|
|
#include <fmtanchr.hxx>
|
|
|
|
#include <o3tl/safeint.hxx>
|
2020-02-27 11:41:24 +01:00
|
|
|
|
2020-05-06 10:45:10 +03:00
|
|
|
#include <wrtsh.hxx>
|
|
|
|
|
2020-02-27 11:41:24 +01:00
|
|
|
namespace
|
|
|
|
{
|
|
|
|
char const DATA_DIRECTORY[] = "/sw/qa/extras/uiwriter/data3/";
|
|
|
|
} // namespace
|
|
|
|
|
|
|
|
/// Third set of tests asserting the behavior of Writer user interface shells.
|
|
|
|
class SwUiWriterTest3 : public SwModelTestBase
|
|
|
|
{
|
|
|
|
};
|
|
|
|
|
|
|
|
CPPUNIT_TEST_FIXTURE(SwUiWriterTest3, testTdf129382)
|
|
|
|
{
|
|
|
|
load(DATA_DIRECTORY, "tdf129382.docx");
|
|
|
|
|
|
|
|
SwXTextDocument* pTextDoc = dynamic_cast<SwXTextDocument*>(mxComponent.get());
|
|
|
|
CPPUNIT_ASSERT(pTextDoc);
|
|
|
|
|
2020-05-14 15:42:43 +02:00
|
|
|
CPPUNIT_ASSERT_EQUAL(8, getShapes());
|
2020-02-28 21:01:12 +01:00
|
|
|
CPPUNIT_ASSERT_EQUAL(2, getPages());
|
2020-02-27 11:41:24 +01:00
|
|
|
dispatchCommand(mxComponent, ".uno:SelectAll", {});
|
|
|
|
dispatchCommand(mxComponent, ".uno:Cut", {});
|
2020-05-14 15:42:43 +02:00
|
|
|
CPPUNIT_ASSERT_EQUAL(3, getShapes());
|
2020-02-28 21:01:12 +01:00
|
|
|
CPPUNIT_ASSERT_EQUAL(1, getPages());
|
2020-02-27 11:41:24 +01:00
|
|
|
dispatchCommand(mxComponent, ".uno:Paste", {});
|
2020-05-14 15:42:43 +02:00
|
|
|
CPPUNIT_ASSERT_EQUAL(8, getShapes());
|
2020-02-28 21:01:12 +01:00
|
|
|
CPPUNIT_ASSERT_EQUAL(2, getPages());
|
2020-02-27 11:41:24 +01:00
|
|
|
dispatchCommand(mxComponent, ".uno:Undo", {});
|
2020-05-14 15:42:43 +02:00
|
|
|
CPPUNIT_ASSERT_EQUAL(3, getShapes());
|
2020-02-28 21:01:12 +01:00
|
|
|
CPPUNIT_ASSERT_EQUAL(1, getPages());
|
|
|
|
|
2020-02-27 11:41:24 +01:00
|
|
|
// without the fix, it crashes
|
|
|
|
dispatchCommand(mxComponent, ".uno:Undo", {});
|
2020-05-14 15:42:43 +02:00
|
|
|
CPPUNIT_ASSERT_EQUAL(8, getShapes());
|
2020-02-27 11:41:24 +01:00
|
|
|
}
|
2020-02-27 16:32:35 +01:00
|
|
|
|
|
|
|
CPPUNIT_TEST_FIXTURE(SwUiWriterTest3, testTdf126626)
|
|
|
|
{
|
|
|
|
load(DATA_DIRECTORY, "tdf126626.docx");
|
|
|
|
|
|
|
|
SwXTextDocument* pTextDoc = dynamic_cast<SwXTextDocument*>(mxComponent.get());
|
|
|
|
CPPUNIT_ASSERT(pTextDoc);
|
|
|
|
|
2020-05-14 15:42:43 +02:00
|
|
|
CPPUNIT_ASSERT_EQUAL(2, getShapes());
|
2020-02-27 16:32:35 +01:00
|
|
|
dispatchCommand(mxComponent, ".uno:SelectAll", {});
|
|
|
|
dispatchCommand(mxComponent, ".uno:Copy", {});
|
2020-05-14 15:42:43 +02:00
|
|
|
CPPUNIT_ASSERT_EQUAL(2, getShapes());
|
2020-02-27 16:32:35 +01:00
|
|
|
dispatchCommand(mxComponent, ".uno:Paste", {});
|
2020-05-14 15:42:43 +02:00
|
|
|
CPPUNIT_ASSERT_EQUAL(2, getShapes());
|
2020-02-27 16:32:35 +01:00
|
|
|
dispatchCommand(mxComponent, ".uno:Paste", {});
|
2020-05-14 15:42:43 +02:00
|
|
|
CPPUNIT_ASSERT_EQUAL(4, getShapes());
|
2020-02-27 16:32:35 +01:00
|
|
|
dispatchCommand(mxComponent, ".uno:Undo", {});
|
2020-05-14 15:42:43 +02:00
|
|
|
CPPUNIT_ASSERT_EQUAL(2, getShapes());
|
2020-02-28 21:01:12 +01:00
|
|
|
|
2020-02-27 16:32:35 +01:00
|
|
|
// without the fix, it crashes
|
|
|
|
dispatchCommand(mxComponent, ".uno:Paste", {});
|
2020-05-14 15:42:43 +02:00
|
|
|
CPPUNIT_ASSERT_EQUAL(4, getShapes());
|
2020-02-27 16:32:35 +01:00
|
|
|
}
|
2020-02-27 18:01:14 +01:00
|
|
|
|
2020-05-05 15:26:49 +02:00
|
|
|
CPPUNIT_TEST_FIXTURE(SwUiWriterTest3, testTdf132187)
|
|
|
|
{
|
|
|
|
load(DATA_DIRECTORY, "tdf132187.odt");
|
|
|
|
|
|
|
|
SwXTextDocument* pTextDoc = dynamic_cast<SwXTextDocument*>(mxComponent.get());
|
|
|
|
CPPUNIT_ASSERT(pTextDoc);
|
|
|
|
|
|
|
|
CPPUNIT_ASSERT_EQUAL(1, getPages());
|
|
|
|
dispatchCommand(mxComponent, ".uno:SelectAll", {});
|
|
|
|
dispatchCommand(mxComponent, ".uno:Copy", {});
|
|
|
|
dispatchCommand(mxComponent, ".uno:GoToEndOfDoc", {});
|
|
|
|
|
|
|
|
for (sal_Int32 i = 0; i < 10; ++i)
|
|
|
|
{
|
|
|
|
dispatchCommand(mxComponent, ".uno:Paste", {});
|
|
|
|
Scheduler::ProcessEventsToIdle();
|
|
|
|
}
|
|
|
|
|
|
|
|
//without the fix in place, this test would fail with:
|
|
|
|
//- Expected: 1
|
|
|
|
//- Actual : 70
|
|
|
|
|
|
|
|
CPPUNIT_ASSERT_EQUAL(1, getPages());
|
|
|
|
}
|
|
|
|
|
2020-02-27 18:01:14 +01:00
|
|
|
CPPUNIT_TEST_FIXTURE(SwUiWriterTest3, testTdf128739)
|
|
|
|
{
|
|
|
|
load(DATA_DIRECTORY, "tdf128739.docx");
|
|
|
|
|
|
|
|
SwXTextDocument* pTextDoc = dynamic_cast<SwXTextDocument*>(mxComponent.get());
|
|
|
|
CPPUNIT_ASSERT(pTextDoc);
|
|
|
|
|
2020-02-28 21:01:12 +01:00
|
|
|
CPPUNIT_ASSERT_EQUAL(OUString("Fehler: Verweis nicht gefunden"), getParagraph(1)->getString());
|
2020-02-27 18:01:14 +01:00
|
|
|
dispatchCommand(mxComponent, ".uno:SelectAll", {});
|
|
|
|
dispatchCommand(mxComponent, ".uno:Cut", {});
|
2020-02-28 21:01:12 +01:00
|
|
|
CPPUNIT_ASSERT_EQUAL(OUString(""), getParagraph(1)->getString());
|
2020-02-27 18:01:14 +01:00
|
|
|
dispatchCommand(mxComponent, ".uno:Paste", {});
|
2020-02-28 21:01:12 +01:00
|
|
|
CPPUNIT_ASSERT_EQUAL(OUString("Fehler: Verweis nicht gefunden"), getParagraph(1)->getString());
|
2020-02-27 18:01:14 +01:00
|
|
|
// without the fix, it crashes
|
|
|
|
dispatchCommand(mxComponent, ".uno:Undo", {});
|
2020-02-28 21:01:12 +01:00
|
|
|
CPPUNIT_ASSERT_EQUAL(OUString(""), getParagraph(1)->getString());
|
2020-02-27 18:01:14 +01:00
|
|
|
}
|
2020-02-28 19:44:38 +01:00
|
|
|
|
2020-04-09 22:21:33 +05:30
|
|
|
CPPUNIT_TEST_FIXTURE(SwUiWriterTest3, testTdf124722)
|
|
|
|
{
|
|
|
|
load(DATA_DIRECTORY, "tdf124722.rtf");
|
|
|
|
|
|
|
|
SwXTextDocument* pTextDoc = dynamic_cast<SwXTextDocument*>(mxComponent.get());
|
|
|
|
CPPUNIT_ASSERT(pTextDoc);
|
|
|
|
|
|
|
|
CPPUNIT_ASSERT_EQUAL(22, getPages());
|
|
|
|
dispatchCommand(mxComponent, ".uno:SelectAll", {});
|
|
|
|
dispatchCommand(mxComponent, ".uno:Copy", {});
|
|
|
|
CPPUNIT_ASSERT_EQUAL(22, getPages());
|
|
|
|
dispatchCommand(mxComponent, ".uno:Paste", {});
|
|
|
|
CPPUNIT_ASSERT_EQUAL(43, getPages());
|
|
|
|
dispatchCommand(mxComponent, ".uno:Undo", {});
|
|
|
|
CPPUNIT_ASSERT_EQUAL(22, getPages());
|
|
|
|
}
|
|
|
|
|
2020-03-05 18:29:20 +01:00
|
|
|
CPPUNIT_TEST_FIXTURE(SwUiWriterTest3, testTdf125261)
|
|
|
|
{
|
|
|
|
load(DATA_DIRECTORY, "tdf125261.odt");
|
|
|
|
|
|
|
|
SwXTextDocument* pTextDoc = dynamic_cast<SwXTextDocument*>(mxComponent.get());
|
|
|
|
CPPUNIT_ASSERT(pTextDoc);
|
|
|
|
|
|
|
|
CPPUNIT_ASSERT_EQUAL(OUString("https://www.example.com/"),
|
|
|
|
getProperty<OUString>(getRun(getParagraph(1), 1), "HyperLinkURL"));
|
|
|
|
//apply autocorrect StartAutoCorrect
|
|
|
|
dispatchCommand(mxComponent, ".uno:AutoFormatApply", {});
|
|
|
|
CPPUNIT_ASSERT_EQUAL(OUString("https://www.example.com/"),
|
|
|
|
getProperty<OUString>(getRun(getParagraph(1), 1), "HyperLinkURL"));
|
|
|
|
// without the fix, it hangs
|
|
|
|
dispatchCommand(mxComponent, ".uno:Undo", {});
|
|
|
|
CPPUNIT_ASSERT_EQUAL(OUString("https://www.example.com/"),
|
|
|
|
getProperty<OUString>(getRun(getParagraph(1), 1), "HyperLinkURL"));
|
|
|
|
}
|
|
|
|
|
2020-03-05 22:15:23 +01:00
|
|
|
CPPUNIT_TEST_FIXTURE(SwUiWriterTest3, testTdf76636)
|
|
|
|
{
|
|
|
|
load(DATA_DIRECTORY, "tdf76636.doc");
|
|
|
|
|
|
|
|
SwXTextDocument* pTextDoc = dynamic_cast<SwXTextDocument*>(mxComponent.get());
|
|
|
|
CPPUNIT_ASSERT(pTextDoc);
|
|
|
|
|
|
|
|
uno::Reference<text::XTextTablesSupplier> xTextTablesSupplier(mxComponent, uno::UNO_QUERY);
|
|
|
|
uno::Reference<container::XIndexAccess> xIndexAccess(xTextTablesSupplier->getTextTables(),
|
|
|
|
uno::UNO_QUERY);
|
|
|
|
uno::Reference<text::XTextTable> xTextTable(xIndexAccess->getByIndex(0), uno::UNO_QUERY);
|
|
|
|
CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xIndexAccess->getCount());
|
|
|
|
CPPUNIT_ASSERT_EQUAL(sal_Int32(3), xTextTable->getRows()->getCount());
|
|
|
|
CPPUNIT_ASSERT_EQUAL(sal_Int32(6), xTextTable->getColumns()->getCount());
|
|
|
|
|
|
|
|
//go to middle row
|
|
|
|
pTextDoc->postKeyEvent(LOK_KEYEVENT_KEYINPUT, 0, KEY_DOWN);
|
|
|
|
pTextDoc->postKeyEvent(LOK_KEYEVENT_KEYINPUT, 0, KEY_DOWN);
|
|
|
|
Scheduler::ProcessEventsToIdle();
|
|
|
|
|
|
|
|
pTextDoc->postKeyEvent(LOK_KEYEVENT_KEYINPUT, 0, KEY_TAB);
|
|
|
|
pTextDoc->postKeyEvent(LOK_KEYEVENT_KEYINPUT, 0, KEY_TAB);
|
|
|
|
pTextDoc->postKeyEvent(LOK_KEYEVENT_KEYINPUT, 0, KEY_TAB);
|
|
|
|
Scheduler::ProcessEventsToIdle();
|
|
|
|
|
|
|
|
pTextDoc->postKeyEvent(LOK_KEYEVENT_KEYINPUT, 0, KEY_LEFT | KEY_SHIFT);
|
|
|
|
pTextDoc->postKeyEvent(LOK_KEYEVENT_KEYINPUT, 0, KEY_LEFT | KEY_SHIFT);
|
|
|
|
Scheduler::ProcessEventsToIdle();
|
|
|
|
|
|
|
|
dispatchCommand(mxComponent, ".uno:MergeCells", {});
|
|
|
|
CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xIndexAccess->getCount());
|
|
|
|
CPPUNIT_ASSERT_EQUAL(sal_Int32(3), xTextTable->getRows()->getCount());
|
|
|
|
CPPUNIT_ASSERT_EQUAL(sal_Int32(4), xTextTable->getColumns()->getCount());
|
|
|
|
|
|
|
|
dispatchCommand(mxComponent, ".uno:Undo", {});
|
|
|
|
CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xIndexAccess->getCount());
|
|
|
|
CPPUNIT_ASSERT_EQUAL(sal_Int32(3), xTextTable->getRows()->getCount());
|
|
|
|
CPPUNIT_ASSERT_EQUAL(sal_Int32(6), xTextTable->getColumns()->getCount());
|
|
|
|
}
|
|
|
|
|
|
|
|
CPPUNIT_TEST_FIXTURE(SwUiWriterTest3, testTdf76636_2)
|
|
|
|
{
|
|
|
|
load(DATA_DIRECTORY, "tdf76636.doc");
|
|
|
|
|
|
|
|
SwXTextDocument* pTextDoc = dynamic_cast<SwXTextDocument*>(mxComponent.get());
|
|
|
|
CPPUNIT_ASSERT(pTextDoc);
|
|
|
|
|
|
|
|
uno::Reference<text::XTextTablesSupplier> xTextTablesSupplier(mxComponent, uno::UNO_QUERY);
|
|
|
|
uno::Reference<container::XIndexAccess> xIndexAccess(xTextTablesSupplier->getTextTables(),
|
|
|
|
uno::UNO_QUERY);
|
|
|
|
uno::Reference<text::XTextTable> xTextTable(xIndexAccess->getByIndex(0), uno::UNO_QUERY);
|
|
|
|
CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xIndexAccess->getCount());
|
|
|
|
CPPUNIT_ASSERT_EQUAL(sal_Int32(3), xTextTable->getRows()->getCount());
|
|
|
|
CPPUNIT_ASSERT_EQUAL(sal_Int32(6), xTextTable->getColumns()->getCount());
|
|
|
|
|
|
|
|
pTextDoc->postKeyEvent(LOK_KEYEVENT_KEYINPUT, 0, KEY_DOWN);
|
|
|
|
pTextDoc->postKeyEvent(LOK_KEYEVENT_KEYINPUT, 0, KEY_DOWN);
|
|
|
|
Scheduler::ProcessEventsToIdle();
|
|
|
|
|
|
|
|
pTextDoc->postKeyEvent(LOK_KEYEVENT_KEYINPUT, 0, KEY_TAB);
|
|
|
|
pTextDoc->postKeyEvent(LOK_KEYEVENT_KEYINPUT, 0, KEY_TAB);
|
|
|
|
Scheduler::ProcessEventsToIdle();
|
|
|
|
|
|
|
|
pTextDoc->postKeyEvent(LOK_KEYEVENT_KEYINPUT, 0, KEY_RIGHT | KEY_SHIFT);
|
|
|
|
Scheduler::ProcessEventsToIdle();
|
|
|
|
|
|
|
|
dispatchCommand(mxComponent, ".uno:MergeCells", {});
|
|
|
|
CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xIndexAccess->getCount());
|
|
|
|
CPPUNIT_ASSERT_EQUAL(sal_Int32(3), xTextTable->getRows()->getCount());
|
|
|
|
CPPUNIT_ASSERT_EQUAL(sal_Int32(5), xTextTable->getColumns()->getCount());
|
|
|
|
|
|
|
|
dispatchCommand(mxComponent, ".uno:Undo", {});
|
|
|
|
CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xIndexAccess->getCount());
|
|
|
|
CPPUNIT_ASSERT_EQUAL(sal_Int32(3), xTextTable->getRows()->getCount());
|
|
|
|
CPPUNIT_ASSERT_EQUAL(sal_Int32(6), xTextTable->getColumns()->getCount());
|
|
|
|
}
|
|
|
|
|
2020-06-11 14:56:19 +02:00
|
|
|
CPPUNIT_TEST_FIXTURE(SwUiWriterTest3, testTdf132725)
|
|
|
|
{
|
|
|
|
load(DATA_DIRECTORY, "tdf132725.odt");
|
|
|
|
|
|
|
|
SwXTextDocument* pTextDoc = dynamic_cast<SwXTextDocument*>(mxComponent.get());
|
|
|
|
CPPUNIT_ASSERT(pTextDoc);
|
|
|
|
|
|
|
|
CPPUNIT_ASSERT_EQUAL(1, getShapes());
|
|
|
|
CPPUNIT_ASSERT_EQUAL(OUString("AA"), getParagraph(1)->getString());
|
|
|
|
|
|
|
|
dispatchCommand(mxComponent, ".uno:GoToEndOfPara", {});
|
|
|
|
Scheduler::ProcessEventsToIdle();
|
|
|
|
|
|
|
|
dispatchCommand(mxComponent, ".uno:SwBackspace", {});
|
|
|
|
dispatchCommand(mxComponent, ".uno:SwBackspace", {});
|
|
|
|
Scheduler::ProcessEventsToIdle();
|
|
|
|
|
2020-06-12 11:22:04 +02:00
|
|
|
CPPUNIT_ASSERT_EQUAL(1, getShapes());
|
2020-06-11 14:56:19 +02:00
|
|
|
CPPUNIT_ASSERT_EQUAL(OUString(""), getParagraph(1)->getString());
|
|
|
|
|
|
|
|
dispatchCommand(mxComponent, ".uno:Undo", {});
|
|
|
|
dispatchCommand(mxComponent, ".uno:Undo", {});
|
|
|
|
Scheduler::ProcessEventsToIdle();
|
|
|
|
|
|
|
|
CPPUNIT_ASSERT_EQUAL(1, getShapes());
|
|
|
|
CPPUNIT_ASSERT_EQUAL(OUString("AA"), getParagraph(1)->getString());
|
|
|
|
|
|
|
|
dispatchCommand(mxComponent, ".uno:Redo", {});
|
|
|
|
dispatchCommand(mxComponent, ".uno:Redo", {});
|
|
|
|
Scheduler::ProcessEventsToIdle();
|
|
|
|
|
2020-06-12 11:22:04 +02:00
|
|
|
CPPUNIT_ASSERT_EQUAL(1, getShapes());
|
2020-06-11 14:56:19 +02:00
|
|
|
CPPUNIT_ASSERT_EQUAL(OUString(""), getParagraph(1)->getString());
|
|
|
|
|
|
|
|
//Without the fix in place, it would crash here
|
|
|
|
dispatchCommand(mxComponent, ".uno:Undo", {});
|
|
|
|
Scheduler::ProcessEventsToIdle();
|
|
|
|
|
|
|
|
CPPUNIT_ASSERT_EQUAL(1, getShapes());
|
2020-06-12 11:22:04 +02:00
|
|
|
CPPUNIT_ASSERT_EQUAL(OUString("AA"), getParagraph(1)->getString());
|
2020-06-11 14:56:19 +02:00
|
|
|
}
|
|
|
|
|
2020-02-28 19:44:38 +01:00
|
|
|
CPPUNIT_TEST_FIXTURE(SwUiWriterTest3, testTdf126340)
|
|
|
|
{
|
|
|
|
load(DATA_DIRECTORY, "tdf126340.odt");
|
|
|
|
|
|
|
|
SwXTextDocument* pTextDoc = dynamic_cast<SwXTextDocument*>(mxComponent.get());
|
|
|
|
CPPUNIT_ASSERT(pTextDoc);
|
|
|
|
|
|
|
|
dispatchCommand(mxComponent, ".uno:GoDown", {});
|
|
|
|
// without the fix, it crashes
|
|
|
|
dispatchCommand(mxComponent, ".uno:Delete", {});
|
|
|
|
CPPUNIT_ASSERT_EQUAL(OUString("foo"), getParagraph(1)->getString());
|
|
|
|
dispatchCommand(mxComponent, ".uno:Undo", {});
|
|
|
|
CPPUNIT_ASSERT_EQUAL(OUString("foo"), getParagraph(1)->getString());
|
|
|
|
}
|
2020-03-04 14:33:46 +01:00
|
|
|
|
2020-04-30 17:55:06 +02:00
|
|
|
CPPUNIT_TEST_FIXTURE(SwUiWriterTest3, testTdf124397)
|
|
|
|
{
|
|
|
|
load(DATA_DIRECTORY, "tdf124397.docx");
|
|
|
|
|
|
|
|
SwXTextDocument* pTextDoc = dynamic_cast<SwXTextDocument*>(mxComponent.get());
|
|
|
|
CPPUNIT_ASSERT(pTextDoc);
|
|
|
|
|
|
|
|
uno::Reference<text::XTextFramesSupplier> xTextFramesSupplier(mxComponent, uno::UNO_QUERY);
|
|
|
|
uno::Reference<container::XIndexAccess> xIndexAccess(xTextFramesSupplier->getTextFrames(),
|
|
|
|
uno::UNO_QUERY);
|
|
|
|
|
|
|
|
CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xIndexAccess->getCount());
|
|
|
|
|
|
|
|
dispatchCommand(mxComponent, ".uno:SelectAll", {});
|
|
|
|
dispatchCommand(mxComponent, ".uno:Delete", {});
|
|
|
|
CPPUNIT_ASSERT_EQUAL(sal_Int32(0), xIndexAccess->getCount());
|
|
|
|
// Without the fix in place, it would crash here
|
|
|
|
dispatchCommand(mxComponent, ".uno:Undo", {});
|
|
|
|
CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xIndexAccess->getCount());
|
|
|
|
}
|
|
|
|
|
2020-03-09 11:13:32 +01:00
|
|
|
CPPUNIT_TEST_FIXTURE(SwUiWriterTest3, testTdf107975)
|
|
|
|
{
|
|
|
|
// This test also covers tdf#117185 tdf#110442
|
|
|
|
|
|
|
|
load(DATA_DIRECTORY, "tdf107975.odt");
|
|
|
|
|
|
|
|
SwXTextDocument* pTextDoc = dynamic_cast<SwXTextDocument*>(mxComponent.get());
|
|
|
|
CPPUNIT_ASSERT(pTextDoc);
|
|
|
|
|
|
|
|
uno::Reference<text::XTextGraphicObjectsSupplier> xTextGraphicObjectsSupplier(mxComponent,
|
|
|
|
uno::UNO_QUERY);
|
|
|
|
uno::Reference<container::XIndexAccess> xIndexAccess(
|
|
|
|
xTextGraphicObjectsSupplier->getGraphicObjects(), uno::UNO_QUERY);
|
|
|
|
|
|
|
|
uno::Reference<drawing::XShape> xShape(xIndexAccess->getByIndex(0), uno::UNO_QUERY);
|
|
|
|
|
|
|
|
CPPUNIT_ASSERT_EQUAL(text::TextContentAnchorType_AT_CHARACTER,
|
|
|
|
getProperty<text::TextContentAnchorType>(xShape, "AnchorType"));
|
|
|
|
|
|
|
|
CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xIndexAccess->getCount());
|
|
|
|
|
|
|
|
dispatchCommand(mxComponent, ".uno:SelectAll", {});
|
|
|
|
dispatchCommand(mxComponent, ".uno:Copy", {});
|
|
|
|
|
|
|
|
//Position the mouse cursor (caret) after "ABC" below the blue image
|
|
|
|
dispatchCommand(mxComponent, ".uno:GoRight", {});
|
|
|
|
dispatchCommand(mxComponent, ".uno:Paste", {});
|
|
|
|
|
|
|
|
// without the fix, it crashes
|
|
|
|
CPPUNIT_ASSERT_EQUAL(sal_Int32(2), xIndexAccess->getCount());
|
|
|
|
CPPUNIT_ASSERT_EQUAL(OUString("ABC"), getParagraph(1)->getString());
|
|
|
|
dispatchCommand(mxComponent, ".uno:Undo", {});
|
|
|
|
CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xIndexAccess->getCount());
|
|
|
|
dispatchCommand(mxComponent, ".uno:Redo", {});
|
|
|
|
CPPUNIT_ASSERT_EQUAL(sal_Int32(2), xIndexAccess->getCount());
|
|
|
|
dispatchCommand(mxComponent, ".uno:Undo", {});
|
|
|
|
CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xIndexAccess->getCount());
|
|
|
|
dispatchCommand(mxComponent, ".uno:Redo", {});
|
|
|
|
CPPUNIT_ASSERT_EQUAL(sal_Int32(2), xIndexAccess->getCount());
|
|
|
|
dispatchCommand(mxComponent, ".uno:Undo", {});
|
|
|
|
CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xIndexAccess->getCount());
|
|
|
|
|
|
|
|
//try again with anchor at start of doc which is another special case
|
|
|
|
xShape.set(xIndexAccess->getByIndex(0), uno::UNO_QUERY);
|
|
|
|
uno::Reference<text::XTextContent> xShapeContent(xShape, uno::UNO_QUERY);
|
|
|
|
uno::Reference<text::XTextRange> const xStart = pTextDoc->getText()->getStart();
|
|
|
|
xShapeContent->attach(xStart);
|
|
|
|
|
|
|
|
CPPUNIT_ASSERT_EQUAL(text::TextContentAnchorType_AT_CHARACTER,
|
|
|
|
getProperty<text::TextContentAnchorType>(xShape, "AnchorType"));
|
|
|
|
|
|
|
|
CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xIndexAccess->getCount());
|
|
|
|
|
|
|
|
dispatchCommand(mxComponent, ".uno:SelectAll", {});
|
|
|
|
dispatchCommand(mxComponent, ".uno:Copy", {});
|
|
|
|
|
|
|
|
//Position the mouse cursor (caret) after "ABC" below the blue image
|
|
|
|
dispatchCommand(mxComponent, ".uno:GoRight", {});
|
|
|
|
dispatchCommand(mxComponent, ".uno:Paste", {});
|
|
|
|
|
|
|
|
// without the fix, it crashes
|
|
|
|
CPPUNIT_ASSERT_EQUAL(sal_Int32(2), xIndexAccess->getCount());
|
|
|
|
CPPUNIT_ASSERT_EQUAL(OUString("ABC"), getParagraph(1)->getString());
|
|
|
|
dispatchCommand(mxComponent, ".uno:Undo", {});
|
|
|
|
CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xIndexAccess->getCount());
|
|
|
|
dispatchCommand(mxComponent, ".uno:Redo", {});
|
|
|
|
CPPUNIT_ASSERT_EQUAL(sal_Int32(2), xIndexAccess->getCount());
|
|
|
|
dispatchCommand(mxComponent, ".uno:Undo", {});
|
|
|
|
CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xIndexAccess->getCount());
|
|
|
|
dispatchCommand(mxComponent, ".uno:Redo", {});
|
|
|
|
CPPUNIT_ASSERT_EQUAL(sal_Int32(2), xIndexAccess->getCount());
|
|
|
|
dispatchCommand(mxComponent, ".uno:Undo", {});
|
|
|
|
CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xIndexAccess->getCount());
|
|
|
|
}
|
|
|
|
|
2020-03-18 11:37:34 +01:00
|
|
|
CPPUNIT_TEST_FIXTURE(SwUiWriterTest3, testTdf130746)
|
|
|
|
{
|
|
|
|
load(DATA_DIRECTORY, "tdf130746.odt");
|
|
|
|
|
|
|
|
SwXTextDocument* pTextDoc = dynamic_cast<SwXTextDocument*>(mxComponent.get());
|
|
|
|
CPPUNIT_ASSERT(pTextDoc);
|
|
|
|
|
|
|
|
uno::Reference<text::XTextTablesSupplier> xTextTablesSupplier(mxComponent, uno::UNO_QUERY);
|
|
|
|
uno::Reference<container::XIndexAccess> xIndexAccess(xTextTablesSupplier->getTextTables(),
|
|
|
|
uno::UNO_QUERY);
|
|
|
|
CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xIndexAccess->getCount());
|
|
|
|
|
|
|
|
dispatchCommand(mxComponent, ".uno:JumpToNextTable", {});
|
|
|
|
|
|
|
|
uno::Reference<frame::XModel> xModel(mxComponent, uno::UNO_QUERY);
|
|
|
|
uno::Reference<text::XTextViewCursorSupplier> xTextViewCursorSupplier(
|
|
|
|
xModel->getCurrentController(), uno::UNO_QUERY);
|
|
|
|
uno::Reference<text::XPageCursor> xCursor(xTextViewCursorSupplier->getViewCursor(),
|
|
|
|
uno::UNO_QUERY);
|
|
|
|
CPPUNIT_ASSERT_EQUAL(sal_Int16(1), xCursor->getPage());
|
|
|
|
|
|
|
|
pTextDoc->postKeyEvent(LOK_KEYEVENT_KEYINPUT, 0, KEY_RETURN);
|
|
|
|
Scheduler::ProcessEventsToIdle();
|
|
|
|
|
|
|
|
CPPUNIT_ASSERT_EQUAL(sal_Int16(2), xCursor->getPage());
|
|
|
|
|
|
|
|
pTextDoc->postKeyEvent(LOK_KEYEVENT_KEYINPUT, 0, KEY_UP | KEY_MOD2);
|
|
|
|
Scheduler::ProcessEventsToIdle();
|
|
|
|
|
|
|
|
CPPUNIT_ASSERT_EQUAL(sal_Int16(2), xCursor->getPage());
|
|
|
|
|
|
|
|
dispatchCommand(mxComponent, ".uno:Undo", {});
|
|
|
|
|
|
|
|
CPPUNIT_ASSERT_EQUAL(sal_Int16(1), xCursor->getPage());
|
|
|
|
CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xIndexAccess->getCount());
|
|
|
|
}
|
|
|
|
|
2020-04-22 16:53:47 +02:00
|
|
|
CPPUNIT_TEST_FIXTURE(SwUiWriterTest3, testTdf129805)
|
|
|
|
{
|
|
|
|
load(DATA_DIRECTORY, "tdf129805.docx");
|
|
|
|
|
|
|
|
SwXTextDocument* pTextDoc = dynamic_cast<SwXTextDocument*>(mxComponent.get());
|
|
|
|
CPPUNIT_ASSERT(pTextDoc);
|
|
|
|
|
|
|
|
CPPUNIT_ASSERT_EQUAL(OUString("x"), getParagraph(1)->getString());
|
|
|
|
dispatchCommand(mxComponent, ".uno:SelectAll", {});
|
|
|
|
// without the fix in place, it would crash here
|
|
|
|
dispatchCommand(mxComponent, ".uno:Cut", {});
|
|
|
|
CPPUNIT_ASSERT_EQUAL(OUString(""), getParagraph(1)->getString());
|
|
|
|
|
|
|
|
dispatchCommand(mxComponent, ".uno:Undo", {});
|
|
|
|
CPPUNIT_ASSERT_EQUAL(OUString("x"), getParagraph(1)->getString());
|
|
|
|
}
|
|
|
|
|
2020-04-06 14:15:53 +02:00
|
|
|
CPPUNIT_TEST_FIXTURE(SwUiWriterTest3, testTdf130685)
|
|
|
|
{
|
|
|
|
load(DATA_DIRECTORY, "tdf130685.odt");
|
|
|
|
|
|
|
|
SwXTextDocument* pTextDoc = dynamic_cast<SwXTextDocument*>(mxComponent.get());
|
|
|
|
CPPUNIT_ASSERT(pTextDoc);
|
|
|
|
|
|
|
|
CPPUNIT_ASSERT_EQUAL(2, getPages());
|
|
|
|
dispatchCommand(mxComponent, ".uno:SelectAll", {});
|
|
|
|
dispatchCommand(mxComponent, ".uno:Cut", {});
|
|
|
|
Scheduler::ProcessEventsToIdle();
|
|
|
|
CPPUNIT_ASSERT_EQUAL(1, getPages());
|
|
|
|
|
|
|
|
dispatchCommand(mxComponent, ".uno:Paste", {});
|
|
|
|
dispatchCommand(mxComponent, ".uno:Paste", {});
|
|
|
|
|
|
|
|
// Without fix in place, this test would have failed with:
|
|
|
|
//- Expected: 2
|
|
|
|
//- Actual : 4
|
|
|
|
CPPUNIT_ASSERT_EQUAL(2, getPages());
|
|
|
|
|
|
|
|
dispatchCommand(mxComponent, ".uno:Undo", {});
|
|
|
|
dispatchCommand(mxComponent, ".uno:Undo", {});
|
|
|
|
CPPUNIT_ASSERT_EQUAL(1, getPages());
|
|
|
|
|
2020-04-20 16:45:21 +02:00
|
|
|
dispatchCommand(mxComponent, ".uno:Undo", {});
|
|
|
|
CPPUNIT_ASSERT_EQUAL(2, getPages());
|
2020-04-06 14:15:53 +02:00
|
|
|
}
|
|
|
|
|
2020-03-04 14:33:46 +01:00
|
|
|
CPPUNIT_TEST_FIXTURE(SwUiWriterTest3, testTdf130680)
|
|
|
|
{
|
|
|
|
load(DATA_DIRECTORY, "tdf130680.odt");
|
|
|
|
|
|
|
|
SwXTextDocument* pTextDoc = dynamic_cast<SwXTextDocument*>(mxComponent.get());
|
|
|
|
CPPUNIT_ASSERT(pTextDoc);
|
|
|
|
|
|
|
|
uno::Reference<text::XTextTablesSupplier> xTextTablesSupplier(mxComponent, uno::UNO_QUERY);
|
|
|
|
uno::Reference<container::XIndexAccess> xIndexAccess(xTextTablesSupplier->getTextTables(),
|
|
|
|
uno::UNO_QUERY);
|
|
|
|
CPPUNIT_ASSERT_EQUAL(sal_Int32(23), xIndexAccess->getCount());
|
|
|
|
|
|
|
|
dispatchCommand(mxComponent, ".uno:SelectAll", {});
|
|
|
|
|
|
|
|
// without the fix, it crashes
|
|
|
|
dispatchCommand(mxComponent, ".uno:Cut", {});
|
|
|
|
CPPUNIT_ASSERT_EQUAL(sal_Int32(0), xIndexAccess->getCount());
|
|
|
|
dispatchCommand(mxComponent, ".uno:Paste", {});
|
|
|
|
CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xIndexAccess->getCount());
|
2020-04-20 16:45:21 +02:00
|
|
|
dispatchCommand(mxComponent, ".uno:Undo", {});
|
|
|
|
CPPUNIT_ASSERT_EQUAL(sal_Int32(0), xIndexAccess->getCount());
|
|
|
|
dispatchCommand(mxComponent, ".uno:Undo", {});
|
|
|
|
CPPUNIT_ASSERT_EQUAL(sal_Int32(23), xIndexAccess->getCount());
|
2020-03-04 14:33:46 +01:00
|
|
|
}
|
2020-04-03 13:12:51 +02:00
|
|
|
|
2020-04-14 20:45:49 +02:00
|
|
|
CPPUNIT_TEST_FIXTURE(SwUiWriterTest3, testTdf131684)
|
|
|
|
{
|
|
|
|
load(DATA_DIRECTORY, "tdf131684.docx");
|
|
|
|
|
|
|
|
SwXTextDocument* pTextDoc = dynamic_cast<SwXTextDocument*>(mxComponent.get());
|
|
|
|
CPPUNIT_ASSERT(pTextDoc);
|
|
|
|
|
|
|
|
uno::Reference<text::XTextTablesSupplier> xTextTablesSupplier(mxComponent, uno::UNO_QUERY);
|
|
|
|
uno::Reference<container::XIndexAccess> xIndexAccess(xTextTablesSupplier->getTextTables(),
|
|
|
|
uno::UNO_QUERY);
|
|
|
|
CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xIndexAccess->getCount());
|
|
|
|
|
|
|
|
//Use selectAll 3 times in a row
|
|
|
|
dispatchCommand(mxComponent, ".uno:SelectAll", {});
|
|
|
|
dispatchCommand(mxComponent, ".uno:SelectAll", {});
|
|
|
|
dispatchCommand(mxComponent, ".uno:SelectAll", {});
|
|
|
|
|
|
|
|
dispatchCommand(mxComponent, ".uno:Cut", {});
|
|
|
|
CPPUNIT_ASSERT_EQUAL(sal_Int32(0), xIndexAccess->getCount());
|
|
|
|
|
|
|
|
dispatchCommand(mxComponent, ".uno:Undo", {});
|
|
|
|
CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xIndexAccess->getCount());
|
|
|
|
|
|
|
|
dispatchCommand(mxComponent, ".uno:Paste", {});
|
|
|
|
CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xIndexAccess->getCount());
|
|
|
|
|
|
|
|
// without the fix, it crashes
|
|
|
|
dispatchCommand(mxComponent, ".uno:Undo", {});
|
|
|
|
CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xIndexAccess->getCount());
|
2020-05-26 16:43:27 +02:00
|
|
|
|
|
|
|
// check that the text frame has the correct upper
|
|
|
|
xmlDocUniquePtr pXmlDoc = parseLayoutDump();
|
|
|
|
OUString const sectionId = getXPath(pXmlDoc, "/root/page[1]/body/section[7]", "id");
|
|
|
|
OUString const sectionLower = getXPath(pXmlDoc, "/root/page[1]/body/section[7]", "lower");
|
|
|
|
OUString const textId = getXPath(pXmlDoc, "/root/page[1]/body/section[7]/txt[1]", "id");
|
|
|
|
OUString const textUpper = getXPath(pXmlDoc, "/root/page[1]/body/section[7]/txt[1]", "upper");
|
|
|
|
CPPUNIT_ASSERT_EQUAL(textId, sectionLower);
|
|
|
|
CPPUNIT_ASSERT_EQUAL(sectionId, textUpper);
|
2020-04-14 20:45:49 +02:00
|
|
|
}
|
|
|
|
|
2020-06-03 14:28:36 +02:00
|
|
|
CPPUNIT_TEST_FIXTURE(SwUiWriterTest3, testTdf132420)
|
|
|
|
{
|
|
|
|
load(DATA_DIRECTORY, "tdf132420.odt");
|
|
|
|
|
|
|
|
SwXTextDocument* pTextDoc = dynamic_cast<SwXTextDocument*>(mxComponent.get());
|
|
|
|
CPPUNIT_ASSERT(pTextDoc);
|
|
|
|
|
|
|
|
CPPUNIT_ASSERT_EQUAL(12, getShapes());
|
|
|
|
|
|
|
|
dispatchCommand(mxComponent, ".uno:SelectAll", {});
|
|
|
|
Scheduler::ProcessEventsToIdle();
|
|
|
|
|
|
|
|
dispatchCommand(mxComponent, ".uno:Cut", {});
|
|
|
|
Scheduler::ProcessEventsToIdle();
|
|
|
|
CPPUNIT_ASSERT_EQUAL(0, getShapes());
|
|
|
|
|
|
|
|
dispatchCommand(mxComponent, ".uno:Undo", {});
|
|
|
|
Scheduler::ProcessEventsToIdle();
|
|
|
|
|
|
|
|
//Without the fix in place, 1 frame and 1 image would be gone and getShapes would return 10
|
|
|
|
CPPUNIT_ASSERT_EQUAL(12, getShapes());
|
|
|
|
}
|
|
|
|
|
2020-06-12 13:52:56 +02:00
|
|
|
CPPUNIT_TEST_FIXTURE(SwUiWriterTest3, testTdf132744)
|
|
|
|
{
|
|
|
|
load(DATA_DIRECTORY, "tdf132744.odt");
|
|
|
|
|
|
|
|
SwXTextDocument* pTextDoc = dynamic_cast<SwXTextDocument*>(mxComponent.get());
|
|
|
|
CPPUNIT_ASSERT(pTextDoc);
|
|
|
|
|
|
|
|
CPPUNIT_ASSERT_EQUAL(1, getShapes());
|
|
|
|
|
|
|
|
dispatchCommand(mxComponent, ".uno:SelectAll", {});
|
|
|
|
Scheduler::ProcessEventsToIdle();
|
|
|
|
|
|
|
|
dispatchCommand(mxComponent, ".uno:Cut", {});
|
|
|
|
Scheduler::ProcessEventsToIdle();
|
|
|
|
|
|
|
|
CPPUNIT_ASSERT_EQUAL(0, getShapes());
|
|
|
|
|
|
|
|
dispatchCommand(mxComponent, ".uno:Paste", {});
|
|
|
|
Scheduler::ProcessEventsToIdle();
|
|
|
|
|
|
|
|
//Without the fix in place, the image wouldn't be pasted
|
|
|
|
CPPUNIT_ASSERT_EQUAL(1, getShapes());
|
|
|
|
}
|
|
|
|
|
2020-04-03 13:12:51 +02:00
|
|
|
CPPUNIT_TEST_FIXTURE(SwUiWriterTest3, testTdf80663)
|
|
|
|
{
|
|
|
|
mxComponent = loadFromDesktop("private:factory/swriter", "com.sun.star.text.TextDocument");
|
|
|
|
|
|
|
|
SwXTextDocument* pTextDoc = dynamic_cast<SwXTextDocument*>(mxComponent.get());
|
|
|
|
CPPUNIT_ASSERT(pTextDoc);
|
|
|
|
|
|
|
|
uno::Sequence<beans::PropertyValue> aArgs(comphelper::InitPropertySequence(
|
|
|
|
{ { "Rows", uno::makeAny(sal_Int32(2)) }, { "Columns", uno::makeAny(sal_Int32(2)) } }));
|
|
|
|
|
|
|
|
dispatchCommand(mxComponent, ".uno:InsertTable", aArgs);
|
|
|
|
Scheduler::ProcessEventsToIdle();
|
|
|
|
|
|
|
|
uno::Reference<text::XTextTablesSupplier> xTextTablesSupplier(mxComponent, uno::UNO_QUERY);
|
|
|
|
uno::Reference<container::XIndexAccess> xIndexAccess(xTextTablesSupplier->getTextTables(),
|
|
|
|
uno::UNO_QUERY);
|
|
|
|
uno::Reference<text::XTextTable> xTextTable(xIndexAccess->getByIndex(0), uno::UNO_QUERY);
|
|
|
|
CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xIndexAccess->getCount());
|
|
|
|
CPPUNIT_ASSERT_EQUAL(sal_Int32(2), xTextTable->getRows()->getCount());
|
|
|
|
CPPUNIT_ASSERT_EQUAL(sal_Int32(2), xTextTable->getColumns()->getCount());
|
|
|
|
|
|
|
|
dispatchCommand(mxComponent, ".uno:DeleteRows", {});
|
|
|
|
Scheduler::ProcessEventsToIdle();
|
|
|
|
|
|
|
|
CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xIndexAccess->getCount());
|
|
|
|
CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xTextTable->getRows()->getCount());
|
|
|
|
CPPUNIT_ASSERT_EQUAL(sal_Int32(2), xTextTable->getColumns()->getCount());
|
|
|
|
|
|
|
|
dispatchCommand(mxComponent, ".uno:Undo", {});
|
|
|
|
Scheduler::ProcessEventsToIdle();
|
|
|
|
|
|
|
|
CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xIndexAccess->getCount());
|
|
|
|
CPPUNIT_ASSERT_EQUAL(sal_Int32(2), xTextTable->getRows()->getCount());
|
|
|
|
CPPUNIT_ASSERT_EQUAL(sal_Int32(2), xTextTable->getColumns()->getCount());
|
|
|
|
}
|
|
|
|
|
2020-05-26 10:09:51 +02:00
|
|
|
CPPUNIT_TEST_FIXTURE(SwUiWriterTest3, testTdf130805)
|
|
|
|
{
|
|
|
|
load(DATA_DIRECTORY, "tdf130805.odt");
|
|
|
|
SwXTextDocument* pTextDoc = dynamic_cast<SwXTextDocument*>(mxComponent.get());
|
|
|
|
CPPUNIT_ASSERT(pTextDoc);
|
|
|
|
|
|
|
|
SwWrtShell* pWrtSh = pTextDoc->GetDocShell()->GetWrtShell();
|
|
|
|
CPPUNIT_ASSERT(pWrtSh);
|
|
|
|
|
|
|
|
const SwFrameFormats& rFrmFormats = *pWrtSh->GetDoc()->GetSpzFrameFormats();
|
|
|
|
CPPUNIT_ASSERT(rFrmFormats.size() >= size_t(o3tl::make_unsigned(1)));
|
|
|
|
auto pShape = rFrmFormats.front();
|
|
|
|
CPPUNIT_ASSERT(pShape);
|
|
|
|
|
|
|
|
SwTextBoxHelper::create(pShape);
|
|
|
|
auto pTxBxFrm = SwTextBoxHelper::getOtherTextBoxFormat(getShape(1));
|
|
|
|
CPPUNIT_ASSERT(pTxBxFrm);
|
|
|
|
|
|
|
|
auto pTxAnch = pTxBxFrm->GetAnchor().GetContentAnchor();
|
|
|
|
auto pShpAnch = pShape->GetAnchor().GetContentAnchor();
|
|
|
|
CPPUNIT_ASSERT(pTxAnch);
|
|
|
|
CPPUNIT_ASSERT(pShpAnch);
|
|
|
|
|
|
|
|
CPPUNIT_ASSERT_EQUAL_MESSAGE("The textbox got apart!", pTxAnch->nNode, pShpAnch->nNode);
|
|
|
|
//CPPUNIT_ASSERT_EQUAL_MESSAGE("", xShp->getPosition().Y, xShp2->getPosition().Y);
|
|
|
|
}
|
|
|
|
|
2020-04-03 13:12:51 +02:00
|
|
|
CPPUNIT_TEST_FIXTURE(SwUiWriterTest3, testTdf96067)
|
|
|
|
{
|
|
|
|
mxComponent = loadFromDesktop("private:factory/swriter", "com.sun.star.text.TextDocument");
|
|
|
|
|
|
|
|
SwXTextDocument* pTextDoc = dynamic_cast<SwXTextDocument*>(mxComponent.get());
|
|
|
|
CPPUNIT_ASSERT(pTextDoc);
|
|
|
|
|
|
|
|
uno::Sequence<beans::PropertyValue> aArgs(comphelper::InitPropertySequence(
|
|
|
|
{ { "Rows", uno::makeAny(sal_Int32(3)) }, { "Columns", uno::makeAny(sal_Int32(3)) } }));
|
|
|
|
|
|
|
|
dispatchCommand(mxComponent, ".uno:InsertTable", aArgs);
|
|
|
|
Scheduler::ProcessEventsToIdle();
|
|
|
|
|
|
|
|
uno::Reference<text::XTextTablesSupplier> xTextTablesSupplier(mxComponent, uno::UNO_QUERY);
|
|
|
|
uno::Reference<container::XIndexAccess> xIndexAccess(xTextTablesSupplier->getTextTables(),
|
|
|
|
uno::UNO_QUERY);
|
|
|
|
uno::Reference<text::XTextTable> xTextTable(xIndexAccess->getByIndex(0), uno::UNO_QUERY);
|
|
|
|
CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xIndexAccess->getCount());
|
|
|
|
CPPUNIT_ASSERT_EQUAL(sal_Int32(3), xTextTable->getRows()->getCount());
|
|
|
|
CPPUNIT_ASSERT_EQUAL(sal_Int32(3), xTextTable->getColumns()->getCount());
|
|
|
|
|
|
|
|
dispatchCommand(mxComponent, ".uno:SelectTable", {});
|
|
|
|
dispatchCommand(mxComponent, ".uno:InsertRowsBefore", {});
|
|
|
|
Scheduler::ProcessEventsToIdle();
|
|
|
|
|
|
|
|
CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xIndexAccess->getCount());
|
|
|
|
CPPUNIT_ASSERT_EQUAL(sal_Int32(6), xTextTable->getRows()->getCount());
|
|
|
|
CPPUNIT_ASSERT_EQUAL(sal_Int32(3), xTextTable->getColumns()->getCount());
|
|
|
|
|
|
|
|
dispatchCommand(mxComponent, ".uno:Undo", {});
|
|
|
|
Scheduler::ProcessEventsToIdle();
|
|
|
|
|
|
|
|
CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xIndexAccess->getCount());
|
|
|
|
CPPUNIT_ASSERT_EQUAL(sal_Int32(3), xTextTable->getRows()->getCount());
|
|
|
|
CPPUNIT_ASSERT_EQUAL(sal_Int32(3), xTextTable->getColumns()->getCount());
|
|
|
|
}
|
|
|
|
|
2020-04-03 20:35:52 +02:00
|
|
|
CPPUNIT_TEST_FIXTURE(SwUiWriterTest3, testTdf87199)
|
|
|
|
{
|
|
|
|
mxComponent = loadFromDesktop("private:factory/swriter", "com.sun.star.text.TextDocument");
|
|
|
|
|
|
|
|
SwXTextDocument* pTextDoc = dynamic_cast<SwXTextDocument*>(mxComponent.get());
|
|
|
|
CPPUNIT_ASSERT(pTextDoc);
|
|
|
|
|
|
|
|
uno::Sequence<beans::PropertyValue> aArgs(comphelper::InitPropertySequence(
|
|
|
|
{ { "Rows", uno::makeAny(sal_Int32(2)) }, { "Columns", uno::makeAny(sal_Int32(1)) } }));
|
|
|
|
|
|
|
|
dispatchCommand(mxComponent, ".uno:InsertTable", aArgs);
|
|
|
|
|
|
|
|
uno::Reference<text::XTextTablesSupplier> xTextTablesSupplier(mxComponent, uno::UNO_QUERY);
|
|
|
|
uno::Reference<container::XIndexAccess> xIndexAccess(xTextTablesSupplier->getTextTables(),
|
|
|
|
uno::UNO_QUERY);
|
|
|
|
uno::Reference<text::XTextTable> xTextTable(xIndexAccess->getByIndex(0), uno::UNO_QUERY);
|
|
|
|
CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xIndexAccess->getCount());
|
|
|
|
CPPUNIT_ASSERT_EQUAL(sal_Int32(2), xTextTable->getRows()->getCount());
|
|
|
|
CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xTextTable->getColumns()->getCount());
|
|
|
|
|
|
|
|
uno::Reference<text::XTextRange> xCellA1(xTextTable->getCellByName("A1"), uno::UNO_QUERY);
|
|
|
|
xCellA1->setString("test1");
|
|
|
|
|
|
|
|
uno::Reference<text::XTextRange> xCellA2(xTextTable->getCellByName("A2"), uno::UNO_QUERY);
|
|
|
|
xCellA2->setString("test2");
|
|
|
|
|
|
|
|
dispatchCommand(mxComponent, ".uno:EntireColumn", {});
|
|
|
|
dispatchCommand(mxComponent, ".uno:MergeCells", {});
|
|
|
|
Scheduler::ProcessEventsToIdle();
|
|
|
|
|
|
|
|
CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xIndexAccess->getCount());
|
|
|
|
CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xTextTable->getRows()->getCount());
|
|
|
|
CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xTextTable->getColumns()->getCount());
|
|
|
|
|
|
|
|
CPPUNIT_ASSERT(xCellA1->getString().endsWith("test2"));
|
|
|
|
|
|
|
|
dispatchCommand(mxComponent, ".uno:Undo", {});
|
|
|
|
Scheduler::ProcessEventsToIdle();
|
|
|
|
|
|
|
|
CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xIndexAccess->getCount());
|
|
|
|
CPPUNIT_ASSERT_EQUAL(sal_Int32(2), xTextTable->getRows()->getCount());
|
|
|
|
CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xTextTable->getColumns()->getCount());
|
|
|
|
|
|
|
|
xCellA1.set(xTextTable->getCellByName("A1"), uno::UNO_QUERY);
|
|
|
|
|
|
|
|
CPPUNIT_ASSERT(xCellA1->getString().endsWith("test1"));
|
|
|
|
}
|
2020-04-03 12:41:05 +02:00
|
|
|
|
2020-05-05 19:27:58 +02:00
|
|
|
CPPUNIT_TEST_FIXTURE(SwUiWriterTest3, testTdf132603)
|
|
|
|
{
|
|
|
|
mxComponent = loadFromDesktop("private:factory/swriter", "com.sun.star.text.TextDocument");
|
|
|
|
|
|
|
|
SwXTextDocument* pTextDoc = dynamic_cast<SwXTextDocument*>(mxComponent.get());
|
|
|
|
CPPUNIT_ASSERT(pTextDoc);
|
|
|
|
|
|
|
|
uno::Sequence<beans::PropertyValue> aPropertyValues
|
|
|
|
= comphelper::InitPropertySequence({ { "Text", uno::makeAny(OUString("Comment")) } });
|
|
|
|
|
|
|
|
dispatchCommand(mxComponent, ".uno:InsertAnnotation", aPropertyValues);
|
|
|
|
Scheduler::ProcessEventsToIdle();
|
|
|
|
|
|
|
|
dispatchCommand(mxComponent, ".uno:SelectAll", {});
|
|
|
|
Scheduler::ProcessEventsToIdle();
|
|
|
|
|
|
|
|
// Without the fix in place, it would crash here
|
|
|
|
dispatchCommand(mxComponent, ".uno:Copy", {});
|
|
|
|
Scheduler::ProcessEventsToIdle();
|
|
|
|
|
|
|
|
OUString aPostits = pTextDoc->getPostIts();
|
|
|
|
std::stringstream aStream(aPostits.toUtf8().getStr());
|
|
|
|
boost::property_tree::ptree aTree;
|
|
|
|
boost::property_tree::read_json(aStream, aTree);
|
|
|
|
for (const boost::property_tree::ptree::value_type& rValue : aTree.get_child("comments"))
|
|
|
|
{
|
|
|
|
const boost::property_tree::ptree& rComment = rValue.second;
|
|
|
|
OString aText(rComment.get<std::string>("text").c_str());
|
|
|
|
CPPUNIT_ASSERT_EQUAL(OString("Comment"), aText);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2020-04-03 12:41:05 +02:00
|
|
|
CPPUNIT_TEST_FIXTURE(SwUiWriterTest3, testTdf117601)
|
|
|
|
{
|
|
|
|
mxComponent = loadFromDesktop("private:factory/swriter", "com.sun.star.text.TextDocument");
|
|
|
|
|
|
|
|
SwXTextDocument* pTextDoc = dynamic_cast<SwXTextDocument*>(mxComponent.get());
|
|
|
|
CPPUNIT_ASSERT(pTextDoc);
|
|
|
|
|
|
|
|
uno::Sequence<beans::PropertyValue> aArgs(comphelper::InitPropertySequence(
|
|
|
|
{ { "Rows", uno::makeAny(sal_Int32(5)) }, { "Columns", uno::makeAny(sal_Int32(3)) } }));
|
|
|
|
|
|
|
|
dispatchCommand(mxComponent, ".uno:InsertTable", aArgs);
|
|
|
|
Scheduler::ProcessEventsToIdle();
|
|
|
|
|
|
|
|
uno::Reference<text::XTextTablesSupplier> xTextTablesSupplier(mxComponent, uno::UNO_QUERY);
|
|
|
|
uno::Reference<container::XIndexAccess> xIndexAccess(xTextTablesSupplier->getTextTables(),
|
|
|
|
uno::UNO_QUERY);
|
|
|
|
uno::Reference<text::XTextTable> xTextTable(xIndexAccess->getByIndex(0), uno::UNO_QUERY);
|
|
|
|
CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xIndexAccess->getCount());
|
|
|
|
CPPUNIT_ASSERT_EQUAL(sal_Int32(5), xTextTable->getRows()->getCount());
|
|
|
|
CPPUNIT_ASSERT_EQUAL(sal_Int32(3), xTextTable->getColumns()->getCount());
|
|
|
|
|
|
|
|
uno::Reference<text::XTextRange> xCellB1(xTextTable->getCellByName("B1"), uno::UNO_QUERY);
|
|
|
|
xCellB1->setString("test1");
|
|
|
|
|
|
|
|
uno::Reference<text::XTextRange> xCellB2(xTextTable->getCellByName("B2"), uno::UNO_QUERY);
|
|
|
|
xCellB2->setString("test2");
|
|
|
|
|
|
|
|
//go to middle row
|
|
|
|
pTextDoc->postKeyEvent(LOK_KEYEVENT_KEYINPUT, 0, KEY_UP);
|
|
|
|
pTextDoc->postKeyEvent(LOK_KEYEVENT_KEYINPUT, 0, KEY_RIGHT);
|
|
|
|
Scheduler::ProcessEventsToIdle();
|
|
|
|
|
|
|
|
dispatchCommand(mxComponent, ".uno:EntireColumn", {});
|
|
|
|
dispatchCommand(mxComponent, ".uno:MergeCells", {});
|
|
|
|
Scheduler::ProcessEventsToIdle();
|
|
|
|
|
|
|
|
CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xIndexAccess->getCount());
|
|
|
|
CPPUNIT_ASSERT_EQUAL(sal_Int32(5), xTextTable->getRows()->getCount());
|
|
|
|
CPPUNIT_ASSERT_EQUAL(sal_Int32(3), xTextTable->getColumns()->getCount());
|
|
|
|
|
|
|
|
CPPUNIT_ASSERT(xCellB1->getString().endsWith("test2"));
|
|
|
|
|
|
|
|
dispatchCommand(mxComponent, ".uno:Undo", {});
|
|
|
|
Scheduler::ProcessEventsToIdle();
|
|
|
|
|
|
|
|
CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xIndexAccess->getCount());
|
|
|
|
CPPUNIT_ASSERT_EQUAL(sal_Int32(5), xTextTable->getRows()->getCount());
|
|
|
|
CPPUNIT_ASSERT_EQUAL(sal_Int32(3), xTextTable->getColumns()->getCount());
|
|
|
|
|
|
|
|
CPPUNIT_ASSERT(xCellB1->getString().endsWith("test1"));
|
|
|
|
}
|
|
|
|
|
2020-05-18 11:49:33 +02:00
|
|
|
CPPUNIT_TEST_FIXTURE(SwUiWriterTest3, testTdf128782)
|
|
|
|
{
|
|
|
|
load(DATA_DIRECTORY, "tdf128782.odt");
|
|
|
|
SwXTextDocument* pTextDoc = dynamic_cast<SwXTextDocument*>(mxComponent.get());
|
|
|
|
CPPUNIT_ASSERT(pTextDoc);
|
|
|
|
|
|
|
|
CPPUNIT_ASSERT_EQUAL(2, getShapes());
|
|
|
|
uno::Reference<drawing::XShape> xShape1 = getShape(1);
|
|
|
|
uno::Reference<drawing::XShape> xShape2 = getShape(2);
|
|
|
|
|
|
|
|
awt::Point aPos[2];
|
|
|
|
aPos[0] = xShape1->getPosition();
|
|
|
|
aPos[1] = xShape2->getPosition();
|
|
|
|
|
|
|
|
//select shape 2 and move it down
|
|
|
|
dispatchCommand(mxComponent, ".uno:JumpToNextFrame", {});
|
|
|
|
dispatchCommand(mxComponent, ".uno:JumpToNextFrame", {});
|
|
|
|
Scheduler::ProcessEventsToIdle();
|
|
|
|
|
|
|
|
pTextDoc->postKeyEvent(LOK_KEYEVENT_KEYINPUT, 0, KEY_DOWN);
|
|
|
|
Scheduler::ProcessEventsToIdle();
|
|
|
|
|
|
|
|
CPPUNIT_ASSERT_EQUAL(aPos[0].X, xShape1->getPosition().X);
|
|
|
|
CPPUNIT_ASSERT_EQUAL(aPos[0].Y, xShape1->getPosition().Y);
|
|
|
|
CPPUNIT_ASSERT_EQUAL(aPos[1].X, xShape2->getPosition().X);
|
|
|
|
//Y position in shape 2 has changed
|
|
|
|
CPPUNIT_ASSERT(aPos[1].Y != xShape2->getPosition().Y);
|
|
|
|
|
|
|
|
dispatchCommand(mxComponent, ".uno:Undo", {});
|
|
|
|
Scheduler::ProcessEventsToIdle();
|
|
|
|
|
|
|
|
CPPUNIT_ASSERT_EQUAL(aPos[0].X, xShape1->getPosition().X);
|
|
|
|
CPPUNIT_ASSERT_EQUAL(aPos[0].Y, xShape1->getPosition().Y);
|
|
|
|
CPPUNIT_ASSERT_EQUAL(aPos[1].X, xShape2->getPosition().X);
|
|
|
|
// Shape2 has come back to the original position
|
|
|
|
// without the fix in place, it would have failed
|
|
|
|
CPPUNIT_ASSERT_EQUAL(aPos[1].Y, xShape2->getPosition().Y);
|
|
|
|
}
|
|
|
|
|
2020-05-06 10:45:10 +03:00
|
|
|
CPPUNIT_TEST_FIXTURE(SwUiWriterTest3, testTdf132637_protectTrackChanges)
|
|
|
|
{
|
|
|
|
load(DATA_DIRECTORY, "tdf132637_protectTrackChanges.doc");
|
|
|
|
SwXTextDocument* pTextDoc = dynamic_cast<SwXTextDocument*>(mxComponent.get());
|
|
|
|
CPPUNIT_ASSERT(pTextDoc);
|
|
|
|
|
|
|
|
// The password should only prevent turning off track changes, not open as read-only
|
|
|
|
CPPUNIT_ASSERT(!pTextDoc->GetDocShell()->IsReadOnly());
|
|
|
|
}
|
|
|
|
|
2020-02-27 11:41:24 +01:00
|
|
|
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|