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."