1
0
Fork 0
libreoffice/sc/qa/uitest/calc_tests9/tdf156611_hyperlink_interoper.py
Daniel Baumann 8e63e14cf6
Adding upstream version 4:25.2.3.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
2025-06-22 16:20:04 +02:00

124 lines
7.2 KiB
Python

# -*- tab-width: 4; indent-tabs-mode: nil; py-indent-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/.
#
from uitest.framework import UITestCase
from uitest.uihelper.common import get_url_for_data_file
from libreoffice.uno.propertyvalue import mkPropertyValues
from libreoffice.calc.document import get_cell_by_position
from uitest.uihelper.calc import enter_text_to_cell
from uitest.uihelper.common import get_state_as_dict, select_pos
class tdf156611(UITestCase):
def test_tdf156611_insert_hyperlink_like_excel(self):
# The hyperlink interoperability setting, that this test is testing,
# works only if MS document type is opened.
# but it does not need any data from the file, any xlsx or xls file can be opened for this test
with self.ui_test.load_file(get_url_for_data_file("tdf126541_GridOff.xlsx")) as document:
# data that we will check against when hyperlink is inserted
urls =[["",""],["https://www.documentfoundation.org/",""]]
texts =[["aaa bbb","bbb"],["cccc ddd","ddd"],["eeee","aaa cccc eeee"]]
# 1. run, we want hyperlink insertion work like in MS excel (only 1 hyperlink/cell is allowed)
# 2. run, we want hyperlink insertion work as it did in calc (more hyperlinks can be in 1 cell)
for i in range(2):
xCalcDoc = self.xUITest.getTopFocusWindow()
xGridWindow = xCalcDoc.getChild("grid_window")
#Change hyperlink interoperability setting
#Go to Tools -> Options -> LibreofficeDev Calc -> Compatibility
with self.ui_test.execute_dialog_through_command(".uno:OptionsTreeDialog", close_button="cancel") as xDialogOpt:
xPages = xDialogOpt.getChild("pages")
xChartEntry = xPages.getChild('3') # LibreofficeDev Calc
xChartEntry.executeAction("EXPAND", tuple())
xChartGeneralEntry = xChartEntry.getChild('7')
xChartGeneralEntry.executeAction("SELECT", tuple()) #Compatibility
xLinks = xDialogOpt.getChild("cellLinkCB")
xLinks.executeAction("CLICK", tuple())
xApply = xDialogOpt.getChild("apply")
xApply.executeAction("CLICK", tuple())
enter_text_to_cell(xGridWindow, "A1", "aaa bbb")
# Select last word of the cell text: "bbb"
xGridWindow.executeAction("SELECT", mkPropertyValues({"CELL": "A1"}))
xGridWindow.executeAction("TYPE", mkPropertyValues({"KEYCODE":"F2"}))
xGridWindow.executeAction("TYPE", mkPropertyValues({"KEYCODE":"SHIFT+CTRL+LEFT"}))
# Insert hyperlink
with self.ui_test.execute_dialog_through_command(".uno:HyperlinkDialog") as xDialog:
xTab = xDialog.getChild("tabcontrol")
select_pos(xTab, "0")
xTarget = xDialog.getChild("target")
self.assertEqual(get_state_as_dict(xTarget)["Text"], "")
xIndication = xDialog.getChild("indication")
self.assertEqual(get_state_as_dict(xIndication)["Text"], texts[0][i])
# 1. run "aaa bbb" The whole cell text
# 2. run "bbb" Only the selected text
# Insert a sample hyperlink, and change text
xTarget.executeAction("TYPE", mkPropertyValues({"KEYCODE":"CTRL+A"}))
xTarget.executeAction("TYPE", mkPropertyValues({"TEXT": "https://www.documentfoundation.org/"}))
xIndication.executeAction("TYPE", mkPropertyValues({"KEYCODE":"CTRL+A"}))
xIndication.executeAction("TYPE", mkPropertyValues({"TEXT": "cccc"}))
# Edit cell text: insert " ddd" in the end
xGridWindow.executeAction("SELECT", mkPropertyValues({"CELL": "A2"}))
xGridWindow.executeAction("SELECT", mkPropertyValues({"CELL": "A1"}))
xGridWindow.executeAction("TYPE", mkPropertyValues({"KEYCODE":"F2"}))
xGridWindow.executeAction("TYPE", mkPropertyValues({"TEXT": " ddd"}))
xGridWindow.executeAction("TYPE", mkPropertyValues({"KEYCODE":"RETURN"}))
# Select the last word of cell text: "ddd"
xGridWindow.executeAction("SELECT", mkPropertyValues({"CELL": "A2"}))
xGridWindow.executeAction("SELECT", mkPropertyValues({"CELL": "A1"}))
xGridWindow.executeAction("TYPE", mkPropertyValues({"KEYCODE":"F2"}))
xGridWindow.executeAction("TYPE", mkPropertyValues({"KEYCODE":"SHIFT+CTRL+LEFT"}))
# Insert hyperlink
with self.ui_test.execute_dialog_through_command(".uno:HyperlinkDialog") as xDialog2:
xTab = xDialog2.getChild("tabcontrol")
select_pos(xTab, "0")
xTarget = xDialog2.getChild("target")
self.assertEqual(get_state_as_dict(xTarget)["Text"], urls[1][i])
# 1. run: "https://www.documentfoundation.org/" the cell already have this url.
# 2. run: "" The selected text is not a hyperlink yet.
xIndication = xDialog2.getChild("indication")
self.assertEqual(get_state_as_dict(xIndication)["Text"], texts[1][i])
# 1. run: "cccc ddd" The whole cell text
# 2. run: "ddd" Only the selected text
# Insert a sample hyperlink, and change text
xTarget.executeAction("TYPE", mkPropertyValues({"KEYCODE":"CTRL+A"}))
xTarget.executeAction("TYPE", mkPropertyValues({"TEXT": "https://aWrongLink/"}))
xIndication.executeAction("TYPE", mkPropertyValues({"KEYCODE":"CTRL+A"}))
xIndication.executeAction("TYPE", mkPropertyValues({"TEXT": "eeee"}))
# Move focus to ensure cell is not in edit mode
xGridWindow.executeAction("SELECT", mkPropertyValues({"CELL": "A2"}))
xGridWindow.executeAction("SELECT", mkPropertyValues({"CELL": "A1"}))
# Check contents of the cell
xCell = get_cell_by_position(document, 0, 0, 0)
self.assertEqual(xCell.getString(), texts[2][i])
# 1. run: "eeee" last hyperlink insertion overwritten the whole cell text with "eeee"
# 2. run: "aaa cccc eeee" as every hyperlink insertion only overwritten the actually selected text
xTextFields = xCell.getTextFields()
self.assertEqual(len(xTextFields), i+1)
self.assertEqual(xTextFields[i].URL, "https://aWrongLink/")
if (i==1):
self.assertEqual(xTextFields[0].URL, "https://www.documentfoundation.org/")
# 1. run: only the last inserted hyperlink will remain: "https://aWrongLink/"
# 2. run: both links will be in the cell
# vim: set shiftwidth=4 softtabstop=4 expandtab: