"""

"""

from lilith.interpreter import (
    Bindings,
    eval,
    Runtime,
)
from lilith.parser import Apply, Args, Symbol
from lilith.reader import Def, Module
import pytest


@pytest.fixture
def runtime():
    return Runtime("test", None, {})


@pytest.mark.parametrize(
    "expr, expected",
    [
        (1, 1),
        ([1, 2], [1, 2]),
        ({"foo": "bar"}, {"foo": "bar"}),
    ],
)
def test_eval(runtime, expr, expected):
    assert (
        eval(
            runtime,
            Module("__repl__", [], dict()),
            Bindings("__root__", None),
            expr,
        )
        == expected
    )


def test_hello_world(capsys, runtime):
    assert (
        eval(
            runtime,
            Module("__repl__", [], {Symbol("print"): Def("__builtin__.print", print)}),
            Bindings("__root__", None),
            Apply(Symbol("print"), Args(["hello, world"], {})),
        )
        is None
    )
    captured = capsys.readouterr()
    assert captured.out == "hello, world\n"