ipin-vr/tests/test_generator.py

171 lines
5 KiB
Python
Raw Permalink Normal View History

import pytest
from ipin_vr.generator import Clause, Command, render
def cmd1(verb, obj, loc, color=None):
return Command(clauses=[Clause(verb, obj, loc, color)], level=1)
def cmd2(verb, obj, loc, color):
return Command(clauses=[Clause(verb, obj, loc, color)], level=2)
# --- kolor + rzeczownik: rodzaj nijaki (n) ---
def test_color_neuter():
# jablko: acc=jabłko, gender=n → czerwone
assert render(cmd2("poloz", "jablko", "stol", "czerwony")) == "Połóż czerwone jabłko na stole."
def test_color_neuter_zolty():
assert render(cmd2("umiesc", "jablko", "biurko", "zolty")) == "Umieść żółte jabłko na biurku."
# --- kolor + rzeczownik: rodzaj męski (m) ---
def test_color_masculine():
# kubek: acc=kubek, gender=m → zielony
assert render(cmd2("poloz", "kubek", "biurko", "zielony")) == "Połóż zielony kubek na biurku."
def test_color_masculine_niebieski():
# klucz: acc=klucz, gender=m → niebieski
assert render(cmd2("umiesc", "klucz", "polka", "niebieski")) == "Umieść niebieski klucz na półce."
# --- kolor + rzeczownik: rodzaj żeński (f) ---
def test_color_feminine():
# lyzka: acc=łyżkę, gender=f → niebieską
assert render(cmd2("poloz", "lyzka", "polka", "niebieski")) == "Połóż niebieską łyżkę na półce."
def test_color_feminine_zolty():
# pilka: acc=piłkę, gender=f → żółtą
assert render(cmd2("poloz", "pilka", "parapet", "zolty")) == "Połóż żółtą piłkę na parapecie."
def test_color_feminine_zielony():
# ksiazka: acc=książkę, gender=f → zieloną
assert render(cmd2("umiesc", "ksiazka", "stol", "zielony")) == "Umieść zieloną książkę na stole."
# --- poprawny miejscownik miejsca ---
def test_location_stol():
assert render(cmd1("poloz", "jablko", "stol")) == "Połóż jabłko na stole."
def test_location_krzeslo():
assert render(cmd1("poloz", "kubek", "krzeslo")) == "Połóż kubek na krześle."
def test_location_polka():
assert render(cmd1("poloz", "klucz", "polka")) == "Połóż klucz na półce."
def test_location_podloga():
assert render(cmd1("poloz", "banan", "podloga")) == "Połóż banan na podłodze."
def test_location_biurko():
assert render(cmd1("poloz", "dlugopis", "biurko")) == "Połóż długopis na biurku."
def test_location_parapet():
assert render(cmd1("poloz", "talerz", "parapet")) == "Połóż talerz na parapecie."
# --- łączenie dwóch klauzul (poziom 3) ---
def test_level3_two_clauses():
cmd = Command(
clauses=[
Clause("poloz", "ksiazka", "polka", "zielony"),
Clause("umiesc", "klucz", "biurko", None),
],
level=3,
)
assert render(cmd) == "Połóż zieloną książkę na półce i umieść klucz na biurku."
def test_level3_both_with_color():
cmd = Command(
clauses=[
Clause("poloz", "jablko", "stol", "czerwony"),
Clause("umiesc", "pilka", "parapet", "zolty"),
],
level=3,
)
assert render(cmd) == "Połóż czerwone jabłko na stole i umieść żółtą piłkę na parapecie."
def test_level3_no_colors():
cmd = Command(
clauses=[
Clause("poloz", "kubek", "biurko", None),
Clause("poloz", "banan", "podloga", None),
],
level=3,
)
assert render(cmd) == "Połóż kubek na biurku i połóż banan na podłodze."
# --- kapitalizacja: pierwsza klauzula wielką, kolejna małą literą ---
def test_capitalization_first_uppercase():
result = render(cmd1("poloz", "jablko", "stol"))
assert result[0].isupper()
def test_capitalization_second_lowercase():
cmd = Command(
clauses=[
Clause("poloz", "jablko", "stol", None),
Clause("poloz", "kubek", "biurko", None),
],
level=3,
)
result = render(cmd)
# "Połóż jabłko na stole i połóż kubek na biurku."
assert result.startswith("Połóż")
assert " i połóż" in result
def test_capitalization_umiesc_second():
cmd = Command(
clauses=[
Clause("umiesc", "talerz", "stol", None),
Clause("umiesc", "butelka", "polka", None),
],
level=3,
)
result = render(cmd)
assert result.startswith("Umieść")
assert " i umieść" in result
# --- przykłady ze SPEC ---
def test_spec_example_poloz_jablko():
assert render(cmd1("poloz", "jablko", "stol")) == "Połóż jabłko na stole."
def test_spec_example_zolta_pilka():
assert render(cmd2("poloz", "pilka", "parapet", "zolty")) == "Połóż żółtą piłkę na parapecie."
def test_spec_example_niebieskie_jablko():
assert render(cmd2("umiesc", "jablko", "stol", "niebieski")) == "Umieść niebieskie jabłko na stole."
def test_spec_example_level3():
cmd = Command(
clauses=[
Clause("poloz", "ksiazka", "polka", "zielony"),
Clause("umiesc", "klucz", "biurko", None),
],
level=3,
)
assert render(cmd) == "Połóż zieloną książkę na półce i umieść klucz na biurku."