tdf#141244, tdf#141770: sc: Add UItest

Change-Id: I692e7a2dab068f0fc19d9612dbc36f5ad2abfe5b
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/114343
Tested-by: Xisco Fauli <xiscofauli@libreoffice.org>
Reviewed-by: Xisco Fauli <xiscofauli@libreoffice.org>
diff --git a/sc/qa/uitest/calc_tests9/tdf141244.py b/sc/qa/uitest/calc_tests9/tdf141244.py
new file mode 100644
index 0000000..d65a35c
--- /dev/null
+++ b/sc/qa/uitest/calc_tests9/tdf141244.py
@@ -0,0 +1,50 @@
# -*- tab-width: 4; indent-tabs-mode: nil; py-indent-offset: 4 -*-
#
# 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_state_as_dict
from libreoffice.uno.propertyvalue import mkPropertyValues
from uitest.uihelper.common import type_text

class tdf141244(UITestCase):

    def test_tdf141244(self):

        self.ui_test.create_doc_in_start_center("calc")

        calcDoc = self.xUITest.getTopFocusWindow()
        gridwin = calcDoc.getChild("grid_window")

        gridwin.executeAction("SELECT", mkPropertyValues({"CELL": "A1"}))
        type_text(gridwin, '=DDE("soffice";"data1.ods";"sheet1.A1")')
        gridwin.executeAction("TYPE", mkPropertyValues({"KEYCODE": "RETURN"}))

        self.ui_test.execute_dialog_through_command(".uno:EditLinks")
        xDialog = self.xUITest.getTopFocusWindow()

        xLinks = xDialog.getChild("TB_LINKS")
        self.assertEqual(1, len(xLinks.getChildren()))

        def handle_modify_dlg(dialog):
            self.assertEqual("soffice", get_state_as_dict(dialog.getChild("app"))['Text'])
            self.assertEqual("data1.ods", get_state_as_dict(dialog.getChild("file"))['Text'])
            self.assertEqual("sheet1.A1", get_state_as_dict(dialog.getChild("category"))['Text'])

            # tdf#141770: Without the fix in place, the cancel button wouldn't have worked here
            xCancelBtn = dialog.getChild("cancel")
            self.ui_test.close_dialog_through_button(xCancelBtn)

        xChangeBtn = xDialog.getChild("CHANGE_SOURCE")

        self.ui_test.execute_blocking_action(xChangeBtn.executeAction, args=('CLICK', ()),
                dialog_handler=handle_modify_dlg)

        xClose = xDialog.getChild("close")
        self.ui_test.close_dialog_through_button(xClose)

        self.ui_test.close_doc()

# vim: set shiftwidth=4 softtabstop=4 expandtab: