Files
ritz/tests/test_conditional.py
T

121 lines
2.5 KiB
Python

"""Tests for conditional rendering (if statements)."""
import pytest
from ritz.parser import parse_component
def test_if_statement():
"""Test parsing if statement for conditional rendering."""
source = """
from ritz.syntax import *
@component
def Toggle():
visible = signal(True)
if visible:
with P():
yield "I am visible!"
"""
ir = parse_component(source)
# Find the if statement
if_stmt = None
for stmt in ir["body"]:
if stmt["type"] == "if":
if_stmt = stmt
break
assert if_stmt is not None
assert if_stmt["test"]["type"] == "name"
assert if_stmt["test"]["id"] == "visible"
assert len(if_stmt["body"]) == 1
assert if_stmt["body"][0]["type"] == "with"
def test_if_else_statement():
"""Test parsing if/else for conditional rendering."""
source = """
from ritz.syntax import *
@component
def Toggle():
visible = signal(True)
if visible:
with P():
yield "Shown"
else:
with P():
yield "Hidden"
"""
ir = parse_component(source)
# Find the if statement
if_stmt = None
for stmt in ir["body"]:
if stmt["type"] == "if":
if_stmt = stmt
break
assert if_stmt is not None
assert len(if_stmt["body"]) == 1
assert len(if_stmt["orelse"]) == 1
assert if_stmt["body"][0]["element"]["tag"] == "P"
assert if_stmt["orelse"][0]["element"]["tag"] == "P"
def test_if_comparison():
"""Test parsing if statement with comparison."""
source = """
from ritz.syntax import *
@component
def Counter():
count = signal(0)
if count > 5:
with P():
yield "High count!"
"""
ir = parse_component(source)
# Find the if statement
if_stmt = None
for stmt in ir["body"]:
if stmt["type"] == "if":
if_stmt = stmt
break
assert if_stmt is not None
assert if_stmt["test"]["type"] == "compare"
assert if_stmt["test"]["op"] == "Gt"
def test_nested_if():
"""Test parsing nested if statements."""
source = """
from ritz.syntax import *
@component
def Nested():
a = signal(True)
b = signal(False)
if a:
if b:
with P():
yield "Both true"
"""
ir = parse_component(source)
# Find outer if
outer_if = None
for stmt in ir["body"]:
if stmt["type"] == "if":
outer_if = stmt
break
assert outer_if is not None
assert outer_if["body"][0]["type"] == "if"