tdf#95217, tdf#142600: sc: Add UItest
for that, launch an http server in a separate thread
Change-Id: I9d78c9a4349620a9de31b3963f2a31ff1d354f86
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/127592
Tested-by: Jenkins
Reviewed-by: Xisco Fauli <xiscofauli@libreoffice.org>
diff --git a/sc/qa/uitest/calc_tests3/tdf95217.py b/sc/qa/uitest/calc_tests3/tdf95217.py
new file mode 100644
index 0000000..98f79e5
--- /dev/null
+++ b/sc/qa/uitest/calc_tests3/tdf95217.py
@@ -0,0 +1,54 @@
# -*- 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_state_as_dict
from uitest.uihelper.common import select_pos
from libreoffice.uno.propertyvalue import mkPropertyValues
from uitest.uihelper.common import get_url_for_data_file
from libreoffice.calc.document import get_cell_by_position
class tdf95217(UITestCase):
def test_tdf95217(self):
with self.ui_test.launch_HTTP_server("tdf95217.html") as url:
with self.ui_test.create_doc_in_start_center("calc") as calc_doc:
with self.ui_test.execute_dialog_through_command(".uno:InsertExternalDataSource", close_button="") as xDialog:
xUrl = xDialog.getChild("url")
xUrl.executeAction("TYPE", mkPropertyValues({"TEXT": url}))
with self.ui_test.execute_blocking_action(xUrl.executeAction, args=("TYPE", mkPropertyValues({"KEYCODE": "RETURN"}))):
pass
xRanges = xDialog.getChild("ranges")
self.assertEqual("3", get_state_as_dict(xRanges)["Children"])
# tdf#142600: Without the fix in place, this test would have failed with
# AssertionError: 'HTML_all' != 'HTML_1'
self.assertEqual("HTML_all", get_state_as_dict(xRanges.getChild("0"))["Text"])
self.assertEqual("HTML_tables", get_state_as_dict(xRanges.getChild("1"))["Text"])
self.assertEqual("HTML_1", get_state_as_dict(xRanges.getChild("2"))["Text"])
# FIXME: close_dialog_through_button fails here
xOkBtn = xDialog.getChild("ok")
xOkBtn.executeAction("CLICK", tuple())
# Without the fix in place, this test would have failed with
# AssertionError: 'وضعیت بازار' != 'وضعیت بازار'
self.assertEqual("وضعیت بازار", get_cell_by_position(calc_doc, 0, 0, 0).getString())
self.assertEqual("شاخص کل", get_cell_by_position(calc_doc, 0, 0, 1).getString())
self.assertEqual("شاخص كل (هم وزن)", get_cell_by_position(calc_doc, 0, 0, 2).getString())
self.assertEqual("بسته", get_cell_by_position(calc_doc, 0, 1, 0).getString())
self.assertEqual("63175", get_cell_by_position(calc_doc, 0, 1, 1).getString())
self.assertEqual("9,690.30 (22.80)", get_cell_by_position(calc_doc, 0, 1, 2).getString())
# vim: set shiftwidth=4 softtabstop=4 expandtab:
diff --git a/sc/qa/uitest/data/tdf95217.html b/sc/qa/uitest/data/tdf95217.html
new file mode 100644
index 0000000..0d03633
--- /dev/null
+++ b/sc/qa/uitest/data/tdf95217.html
@@ -0,0 +1,49 @@
<!doctype html>
<html>
<head><title>.:TSETMC:. :: شرکت مدیریت فناوری بورس تهران</title></head>
<body>
<table class="table1">
<tbody>
<tr>
<td>وضعیت بازار</td>
<td>بسته </td>
</tr>
<tr>
<td>شاخص کل</td>
<td>63,175</td>
</tr>
<tr>
<td>شاخص كل (هم وزن)</td>
<td>9,690.30 (22.80)</td>
</tr>
<tr>
<td>ارزش بازار</td>
<td>2,733,260.531 B</td>
</tr>
<tr>
<td>اطلاعات قیمت</td>
<td>94/7/29 12:34:44</td>
</tr>
<tr>
<td>تعداد معاملات</td>
<td>25,211</td>
</tr>
<tr>
<td>ارزش معاملات</td>
<td>732.587 B</td>
</tr>
<tr>
<td>حجم معاملات</td>
<td>312.439 M</td>
</tr>
</tbody>
</table>
</body>
</html>
diff --git a/uitest/uitest/test.py b/uitest/uitest/test.py
index 3beee0d..c798e76 100644
--- a/uitest/uitest/test.py
+++ b/uitest/uitest/test.py
@@ -6,11 +6,14 @@
#
import time
import functools
import threading
from contextlib import contextmanager
from uitest.config import DEFAULT_SLEEP
from uitest.config import MAX_WAIT
from uitest.uihelper.common import get_state_as_dict
from http.server import HTTPServer, SimpleHTTPRequestHandler
import os
from com.sun.star.uno import RuntimeException
@@ -268,4 +271,27 @@ class UITest(object):
time.sleep(DEFAULT_SLEEP)
raise Exception("Did not execute a dialog for a blocking action")
@contextmanager
def launch_HTTP_server(self, file_name):
# Spawns an http.server.HTTPServer in a separate thread
tdoc = os.getenv("TDOC")
if not os.path.exists(os.path.join(tdoc, file_name)):
raise Exception("File doesn't exists: " + file_name)
# Serve in TDOC directory
handler = functools.partial(SimpleHTTPRequestHandler, directory=tdoc)
with HTTPServer(("localhost", 0), handler) as httpd:
try:
thread = threading.Thread(target=httpd.serve_forever)
thread.start()
url = "http://%s:%d/%s" % (httpd.server_name, httpd.server_port, file_name)
yield url
finally:
# Call shutdown in case the testcase fails
httpd.shutdown()
thread.join()
# vim: set shiftwidth=4 softtabstop=4 expandtab: