Workflow-App/Workflow/scripts/_regex_test.py

45 lines
1.3 KiB
Python
Raw Normal View History

import re
snap = '''- heading "Welcome" [level=1, ref=e3]
- textbox "Username" [required, ref=e9]
- link "Forgot Your Username?" [ref=e4]
- button "Next" [ref=e7]
- region "SARS AI Assistant Chat" [ref=e1]
- button "Open SARS AI Assistant Chat" [expanded=false, ref=e2]'''
def find_ref(snap, role, name=None):
if name is None:
pattern = rf"\b{re.escape(role)}\b[^\n]*?[,]?\s*ref=(e\d+)\]"
else:
pattern = (
rf"\b{re.escape(role)}\b[^\n]*?['\"]({re.escape(name)})['\"][^\n]*?"
rf"[,]?\s*ref=(e\d+)\]"
)
m = re.search(pattern, snap, re.MULTILINE)
if m:
return m.group(2) if m.lastindex and m.lastindex >= 2 else m.group(1)
return None
# Test all
cases = [
('textbox', 'Username', 'e9'),
('button', 'Next', 'e7'),
('link', 'Forgot Your Username?', 'e4'),
('heading', 'Welcome', 'e3'),
('region', 'SARS AI Assistant Chat', 'e1'),
('button', 'Open SARS AI Assistant Chat', 'e2'),
(None, 'e9'), # role-only
]
for c in cases:
if c[0] is None:
continue
role, name, want = c
got = find_ref(snap, role, name)
ok = 'OK' if got == want else 'FAIL'
print(f'{ok} find_ref({role!r}, {name!r}) = {got!r} (want {want!r})')
# Role-only
got = find_ref(snap, 'button', 'Next') # works
print('role+name:', got)