48 lines
1.4 KiB
Python
48 lines
1.4 KiB
Python
"""Tests for heurams.kernel.auxiliary.evalizor.Evalizer"""
|
|
|
|
from heurams.kernel.auxiliary.evalizor import Evalizer
|
|
|
|
|
|
class TestEvalizer:
|
|
def test_noop_on_plain_string(self):
|
|
e = Evalizer({"x": 42})
|
|
assert e("hello") == "hello"
|
|
|
|
def test_eval_expression(self):
|
|
e = Evalizer({"x": 42})
|
|
assert e("eval: x") == 42
|
|
|
|
def test_eval_arithmetic(self):
|
|
e = Evalizer({"a": 10, "b": 20})
|
|
assert e("eval: a + b") == 30
|
|
|
|
def test_traverses_dict(self):
|
|
e = Evalizer({"val": 99})
|
|
data = {"key_a": "plain", "key_b": "eval: val + 1"}
|
|
result = e(data)
|
|
assert result == {"key_a": "plain", "key_b": 100}
|
|
|
|
def test_traverses_list(self):
|
|
e = Evalizer({"val": 5})
|
|
data = ["eval: val", "plain", "eval: val * 2"]
|
|
result = e(data)
|
|
assert result == [5, "plain", 10]
|
|
|
|
def test_traverses_nested(self):
|
|
e = Evalizer({"val": 3})
|
|
data = {"outer": {"inner": "eval: val ** 2"}}
|
|
result = e(data)
|
|
assert result == {"outer": {"inner": 9}}
|
|
|
|
def test_traverses_tuple(self):
|
|
e = Evalizer({"val": 7})
|
|
data = ("eval: val", "other")
|
|
result = e(data)
|
|
assert result == (7, "other")
|
|
|
|
def test_non_string_passthrough(self):
|
|
e = Evalizer({})
|
|
assert e(42) == 42
|
|
assert e(None) is None
|
|
assert e([1, 2, 3]) == [1, 2, 3]
|