125 lines
3.2 KiB
Python
125 lines
3.2 KiB
Python
"""Tests for dynamic page features — source, if/for, codegen."""
|
|
|
|
import uframe
|
|
|
|
|
|
def test_static_page_not_dynamic():
|
|
result = uframe.compile('page "Test" 40\n heading 1 "Hello"')
|
|
assert not result.is_dynamic
|
|
assert result.script == ""
|
|
|
|
|
|
def test_source_makes_dynamic():
|
|
source = '''page "Test" 40
|
|
source cpu : shell "echo 42"
|
|
heading 1 "CPU: $cpu"'''
|
|
result = uframe.compile(source)
|
|
assert result.is_dynamic
|
|
assert result.script != ""
|
|
assert "#!/usr/bin/env python3" in result.script
|
|
assert "_shell" in result.script
|
|
|
|
|
|
def test_cache_control():
|
|
source = '''page "Test" 40
|
|
cache 0
|
|
heading 1 "Live"'''
|
|
result = uframe.compile(source)
|
|
assert result.is_dynamic
|
|
assert "_cache_seconds = 0" in result.script
|
|
|
|
|
|
def test_if_block():
|
|
source = '''page "Test" 40
|
|
source val : shell "echo 50"
|
|
if $val > 90
|
|
text "Critical"'''
|
|
result = uframe.compile(source)
|
|
assert result.is_dynamic
|
|
assert "if {val} > 90:" in result.script
|
|
|
|
|
|
def test_for_loop():
|
|
source = '''page "Test" 40
|
|
source items : shell "echo hello"
|
|
for item in $items
|
|
text "$item"'''
|
|
result = uframe.compile(source)
|
|
assert result.is_dynamic
|
|
assert "for item in _iter({items}):" in result.script
|
|
|
|
|
|
def test_let_variable():
|
|
"""let + source makes it dynamic; let alone is static."""
|
|
source = '''page "Test" 40
|
|
let name = "Relay Alpha"
|
|
source ts : python "datetime.now().isoformat()"
|
|
heading 1 "$name"'''
|
|
result = uframe.compile(source)
|
|
assert result.is_dynamic
|
|
assert "name = 'Relay Alpha'" in result.script
|
|
|
|
|
|
def test_state_declaration():
|
|
source = '''page "Test" 40
|
|
state "counter" "/tmp/counter.json"
|
|
heading 1 "Visits"'''
|
|
result = uframe.compile(source)
|
|
assert result.is_dynamic
|
|
assert "_load_state" in result.script
|
|
assert "/tmp/counter.json" in result.script
|
|
|
|
|
|
def test_on_submit():
|
|
source = '''page "Test" 40
|
|
form "search"
|
|
field "query" 20 "Search..."
|
|
button "Go" "/page/test.mu"
|
|
on_submit "search"
|
|
text "Results for $query"'''
|
|
result = uframe.compile(source)
|
|
assert result.is_dynamic
|
|
assert "_get_field" in result.script
|
|
|
|
|
|
def test_codegen_has_runtime():
|
|
source = '''page "Test" 40
|
|
source data : shell "echo ok"
|
|
text "$data"'''
|
|
result = uframe.compile(source)
|
|
script = result.script
|
|
# Verify the runtime helpers are included
|
|
assert "def _shell" in script
|
|
assert "def _get_field" in script
|
|
assert "def _load_state" in script
|
|
assert "def _iter" in script
|
|
assert "import uframe" in script
|
|
assert "result.micron" in script
|
|
|
|
|
|
def test_codegen_complete_dashboard():
|
|
source = '''page "Dashboard" 60
|
|
cache 0
|
|
source cpu : shell "echo 42"
|
|
source mem : shell "echo 67"
|
|
|
|
box double "Node Status"
|
|
text "System Monitor"
|
|
|
|
gauge "CPU" $cpu 100 28 warn=75 crit=90
|
|
gauge "MEM" $mem 100 28 warn=80 crit=95
|
|
|
|
if $cpu > 90
|
|
text "ALERT: CPU critical"
|
|
|
|
divider heavy
|
|
link "Home" "/page/index.mu"'''
|
|
result = uframe.compile(source)
|
|
assert result.is_dynamic
|
|
script = result.script
|
|
assert "#!/usr/bin/env python3" in script
|
|
assert "_cache_seconds = 0" in script
|
|
assert "_shell" in script
|
|
assert "if {cpu} > 90:" in script
|
|
assert "uframe.compile" in script
|