"""Tests covering the reader."""

from lilith.parser import (
    Apply,
    Args,
    Block,
    Symbol,
)
from lilith.reader import Def, Module, read_buffer
import pytest


@pytest.mark.parametrize(
    "example, expected",
    [
        (
            """!def[main, lang[lil]]\nprint["hello, world"]\n""",
            Module(
                Symbol("&buff"),
                [],
                {
                    Symbol("main"): Def(
                        Block(
                            Apply(Symbol("lang"), Args([Symbol("lil")], {})),
                            ['print["hello, world"]'],
                        ),
                    )
                },
            ),
        )
    ],
)
def test_read(example, expected):
    got = read_buffer(example)
    assert got == expected
