Files
micronomicon/backend/uframe/tests/test_dynamic.py
2026-04-01 08:28:44 +02:00

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