init
Some checks failed
Docker. / Ubuntu (push) Has been cancelled
User-agent updater. / User-agent (push) Failing after 15s
Lock Threads / lock (push) Failing after 10s
Waiting for answer. / waiting-for-answer (push) Failing after 22s
Needs user action. / needs-user-action (push) Failing after 8s
Can't reproduce. / cant-reproduce (push) Failing after 8s
Close stale issues and PRs / stale (push) Has been cancelled
Some checks failed
Docker. / Ubuntu (push) Has been cancelled
User-agent updater. / User-agent (push) Failing after 15s
Lock Threads / lock (push) Failing after 10s
Waiting for answer. / waiting-for-answer (push) Failing after 22s
Needs user action. / needs-user-action (push) Failing after 8s
Can't reproduce. / cant-reproduce (push) Failing after 8s
Close stale issues and PRs / stale (push) Has been cancelled
This commit is contained in:
125
Telegram/ThirdParty/xdg-desktop-portal/tests/test_location.py
vendored
Normal file
125
Telegram/ThirdParty/xdg-desktop-portal/tests/test_location.py
vendored
Normal file
@@ -0,0 +1,125 @@
|
||||
# SPDX-License-Identifier: LGPL-2.1-or-later
|
||||
|
||||
import tests as xdp
|
||||
|
||||
import pytest
|
||||
import dbus
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def required_templates():
|
||||
return {"geoclue2": {}}
|
||||
|
||||
|
||||
class TestLocation:
|
||||
def test_version(self, portals, dbus_con):
|
||||
xdp.check_version(dbus_con, "Location", 1)
|
||||
|
||||
def get_geoclue_mock(self, dbus_con_sys):
|
||||
geoclue_manager_proxy = dbus_con_sys.get_object(
|
||||
"org.freedesktop.GeoClue2",
|
||||
"/org/freedesktop/GeoClue2/Manager",
|
||||
)
|
||||
geoclue_manager = dbus.Interface(
|
||||
geoclue_manager_proxy, "org.freedesktop.GeoClue2.Manager"
|
||||
)
|
||||
geoclue_client_proxy = dbus_con_sys.get_object(
|
||||
"org.freedesktop.GeoClue2", geoclue_manager.GetClient()
|
||||
)
|
||||
geoclue_mock = dbus.Interface(
|
||||
geoclue_client_proxy, "org.freedesktop.GeoClue2.Mock"
|
||||
)
|
||||
return geoclue_mock
|
||||
|
||||
@pytest.mark.parametrize("required_templates", ({},))
|
||||
def test_no_geoclue(self, portals, dbus_con):
|
||||
location_intf = xdp.get_portal_iface(dbus_con, "Location")
|
||||
|
||||
session = xdp.Session(
|
||||
dbus_con,
|
||||
location_intf.CreateSession({"session_handle_token": "session_token0"}),
|
||||
)
|
||||
|
||||
start_session_request = xdp.Request(dbus_con, location_intf)
|
||||
start_session_response = start_session_request.call(
|
||||
"Start",
|
||||
session_handle=session.handle,
|
||||
parent_window="window-hndl",
|
||||
options={},
|
||||
)
|
||||
|
||||
assert start_session_response
|
||||
assert start_session_response.response == 2
|
||||
|
||||
def test_session_update(self, portals, dbus_con, dbus_con_sys):
|
||||
location_intf = xdp.get_portal_iface(dbus_con, "Location")
|
||||
geoclue_mock_intf = self.get_geoclue_mock(dbus_con_sys)
|
||||
|
||||
location_updated = False
|
||||
updated_count = 0
|
||||
|
||||
session = xdp.Session(
|
||||
dbus_con,
|
||||
location_intf.CreateSession({"session_handle_token": "session_token0"}),
|
||||
)
|
||||
|
||||
def cb_location_updated(session_handle, location):
|
||||
nonlocal location_updated
|
||||
nonlocal updated_count
|
||||
|
||||
if updated_count == 0:
|
||||
assert location["Latitude"] == 0
|
||||
assert location["Longitude"] == 0
|
||||
assert location["Accuracy"] == 0
|
||||
elif updated_count == 1:
|
||||
assert location["Latitude"] == 11
|
||||
assert location["Longitude"] == 22
|
||||
assert location["Accuracy"] == 3
|
||||
|
||||
updated_count += 1
|
||||
location_updated = True
|
||||
|
||||
location_intf.connect_to_signal("LocationUpdated", cb_location_updated)
|
||||
|
||||
start_session_request = xdp.Request(dbus_con, location_intf)
|
||||
start_session_response = start_session_request.call(
|
||||
"Start",
|
||||
session_handle=session.handle,
|
||||
parent_window="window-hndl",
|
||||
options={},
|
||||
)
|
||||
|
||||
assert start_session_response
|
||||
assert start_session_response.response == 0
|
||||
|
||||
xdp.wait_for(lambda: location_updated)
|
||||
location_updated = False
|
||||
|
||||
assert updated_count == 1
|
||||
|
||||
geoclue_mock_intf.ChangeLocation(
|
||||
{
|
||||
"Latitude": dbus.UInt32(11),
|
||||
"Longitude": dbus.UInt32(22),
|
||||
"Accuracy": dbus.UInt32(3),
|
||||
}
|
||||
)
|
||||
|
||||
xdp.wait_for(lambda: location_updated)
|
||||
location_updated = False
|
||||
|
||||
assert updated_count == 2
|
||||
|
||||
def test_bad_accuracy(self, portals, dbus_con):
|
||||
location_intf = xdp.get_portal_iface(dbus_con, "Location")
|
||||
with pytest.raises(dbus.exceptions.DBusException) as excinfo:
|
||||
location_intf.CreateSession(
|
||||
{
|
||||
"session_handle_token": "session_token0",
|
||||
"accuracy": dbus.UInt32(22),
|
||||
}
|
||||
)
|
||||
assert (
|
||||
excinfo.value.get_dbus_name()
|
||||
== "org.freedesktop.portal.Error.InvalidArgument"
|
||||
)
|
||||
Reference in New Issue
Block a user