171 lines
5 KiB
Python
171 lines
5 KiB
Python
|
|
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."
|