Release Vulpes OS 2.7-preview.22
This commit is contained in:
parent
200d1fb235
commit
a138f97877
294 changed files with 515786 additions and 187 deletions
69
tundra/tools/test-beatles-settings-keypad.py
Normal file
69
tundra/tools/test-beatles-settings-keypad.py
Normal file
|
|
@ -0,0 +1,69 @@
|
|||
#!/usr/bin/env python3
|
||||
# SPDX-License-Identifier: MPL-2.0
|
||||
"""Check Settings keypad navigation and Gaia switch activation on a Nokia trial.
|
||||
|
||||
Temporarily toggles geolocation and restores its setting. Does not toggle
|
||||
flight mode, send messages, make calls or flash the phone.
|
||||
"""
|
||||
import argparse
|
||||
import importlib.util
|
||||
import json
|
||||
from pathlib import Path
|
||||
import time
|
||||
|
||||
spec=importlib.util.spec_from_file_location('wifi_probe',Path(__file__).with_name('test-beatles-wifi.py'))
|
||||
bridge=importlib.util.module_from_spec(spec);spec.loader.exec_module(bridge)
|
||||
probe=bridge.probe
|
||||
|
||||
|
||||
def main():
|
||||
parser=argparse.ArgumentParser(description=__doc__)
|
||||
parser.add_argument('--output',type=Path,required=True)
|
||||
args=parser.parse_args()
|
||||
if bridge.controls.shell('getprop ro.product.codename')!='beatles' or bridge.controls.shell('getprop init.svc.b2g')!='stopped':
|
||||
raise RuntimeError('Requires an active Nokia Vulpes phone trial')
|
||||
probe('system','await VulpesCompat.call("apps.launch",{manifestURL:"http://settings.localhost:8765/manifest.webapp"});return true;')
|
||||
deadline=time.monotonic()+45
|
||||
while True:
|
||||
try:ready=probe('settings','return document.readyState === "complete" && typeof require === "function";')
|
||||
except RuntimeError as error:
|
||||
if 'find(...) is null' not in str(error):raise
|
||||
ready=False
|
||||
if ready:break
|
||||
if time.monotonic()>deadline:raise TimeoutError('Settings startup')
|
||||
time.sleep(1)
|
||||
probe('settings','require(["modules/settings_service"],s=>s.navigate("root"));return true;')
|
||||
time.sleep(2)
|
||||
initial=probe('settings','return {geo:document.querySelector("gaia-switch[name=\\"geolocation.enabled\\"]").checked,plane:document.querySelector(".airplaneMode-input").checked};')
|
||||
report={'device':'beatles','path':[]}
|
||||
focus='''const e=document.activeElement;const r=e.getBoundingClientRect();return {
|
||||
id:e.querySelector('label')?.id || e.id,top:r.top,bottom:r.bottom,
|
||||
visible:r.top>=0 && r.bottom<=innerHeight};'''
|
||||
def move(key,expected):
|
||||
bridge.controls.inject(key)
|
||||
result=bridge.until('const id=document.activeElement.querySelector("label")?.id || document.activeElement.id;return id === '+json.dumps(expected)+';',app='settings',timeout=6)
|
||||
state=probe('settings',focus)
|
||||
if not state['visible']:raise AssertionError(state)
|
||||
report['path'].append({'key':key,**state})
|
||||
def geo(expected):
|
||||
value=json.dumps(expected)
|
||||
return bridge.until('return document.querySelector("gaia-switch[name=\\"geolocation.enabled\\"]").checked === '+value+' && (await navigator.mozSettings.createLock().get("geolocation.enabled"))["geolocation.enabled"] === '+value+';',app='settings',timeout=10)
|
||||
try:
|
||||
probe('settings','document.getElementById("menuItem-wifi").focus();return true;')
|
||||
move('ArrowUp','menuItem-gps')
|
||||
move('ArrowUp','menuItem-airplaneMode')
|
||||
move('ArrowDown','menuItem-gps')
|
||||
bridge.controls.inject('Enter');geo(not initial['geo'])
|
||||
bridge.controls.inject('Enter');geo(initial['geo'])
|
||||
report['okTogglesAndRestoresGeolocation']=True
|
||||
move('ArrowDown','menuItem-wifi')
|
||||
report['airplaneUnchanged']=probe('settings','return document.querySelector(".airplaneMode-input").checked === '+json.dumps(initial['plane'])+';')
|
||||
assert report['airplaneUnchanged']
|
||||
finally:
|
||||
probe('settings','await navigator.mozSettings.createLock().set({"geolocation.enabled":'+json.dumps(initial['geo'])+'});return true;')
|
||||
args.output.parent.mkdir(parents=True,exist_ok=True)
|
||||
args.output.write_text(json.dumps(report,indent=2)+'\n')
|
||||
print(json.dumps(report,indent=2))
|
||||
|
||||
|
||||
if __name__=='__main__':main()
|
||||
Loading…
Reference in a new issue