Модул:el-c-conj-test
Изглед
Документацијата за овој модул можете да ја создадете на Модул:el-c-conj-test/док
local p = {}
-- Απαιτούμε το κύριο module κλίσης επιθέτων
local main_module = require('Module:el-c-conj')
-- Συνάρτηση για την ανάλυση της συμβολοσειράς εξόδου του module
local function parse_module_output(output_str)
-- Αφαιρούμε την αρχή της γραμμής του πίνακα και το όνομα της πτώσης (π.χ., "|-\n |'''Номинатив''' ||")
-- Πрво отстрануваме сè додека не започне вистинскиот излез со [[
local cleaned_str = output_str:gsub("^%|%-%-%n %|'''[^']-''' %|%|", "")
cleaned_str = mw.text.trim(cleaned_str) -- Trim the result after gsub
-- mw.log("TEST_MODULE_DEBUG: cleaned_str after initial processing: [" .. cleaned_str .. "]") -- Only for privileged users
-- Χωρίζουμε με '||'
local parts = mw.text.split(cleaned_str, "||")
local forms = {}
for i, part in ipairs(parts) do
local trimmed_part = mw.text.trim(part) -- Trim each individual part
-- mw.log("TEST_MODULE_DEBUG: Processing part: [" .. trimmed_part .. "]") -- Only for privileged users
-- Εξάγουμε το περιεχόμενο μεταξύ [[ και ]]
local form = trimmed_part:match("^%[%[(.*)%]%]$")
if form then
forms[i] = form
-- mw.log("TEST_MODULE_DEBUG: Extracted form: [" .. form .. "]") -- Only for privileged users
else
forms[i] = trimmed_part -- Εφεδρική λύση αν δεν είναι σε [[ ]] (не би требало да се случи со правилен излез)
-- mw.log("TEST_MODULE_DEBUG: Fallback form (no [[ ]]): [" .. trimmed_part .. "]") -- Only for privileged users
end
end
return forms
end
-- Εικονικό αντικείμενο frame για την απευθείας κλήση των συναρτήσεων του module
local mock_frame = {
getParent = function()
return {
args = {
[1] = nil, -- Ќе се постави динамички
[2] = nil -- Ќе се постави динамички
}
}
end
}
-- Опис на податоците за тестирање со очекувани излези
-- Секоја очекувана форма е едноставен грчки збор, како што е извлечен од parse_module_output
local test_data = {
{
input_word = "έγγραφος",
fem_type = "η",
expected_forms = {
Nominativ = {
sg_m = "έγγραφος", sg_f = "έγγραφη", sg_n = "έγγραφο",
pl_m = "έγγραφοι", pl_f = "έγγραφες", pl_n = "έγγραφα"
},
Genitiv = {
sg_m = "εγγράφου", sg_f = "έγγραφης", sg_n = "εγγράφου",
pl_m = "εγγράφων", pl_f = "εγγράφων", pl_n = "εγγράφων"
},
Acusativ = {
sg_m = "έγγραφο", sg_f = "έγγραφη", sg_n = "έγγραφο",
pl_m = "έγγραφους", pl_f = "έγγραφες", pl_n = "έγγραφα"
},
Vocativ = {
sg_m = "έγγραφε", sg_f = "έγγραφη", sg_n = "έγγραφο",
pl_m = "έγγραφοι", pl_f = "έγγραφες", pl_n = "έγγραφα"
},
}
},
{
input_word = "ίδιος",
fem_type = "α", -- За ίδιος, женскиот род е -ια, што спаѓа во правилото 'α'
expected_forms = {
Nominativ = {
sg_m = "ίδιος", sg_f = "ίδια", sg_n = "ίδιο",
pl_m = "ίδιοι", pl_f = "ίδιες", pl_n = "ίδια"
},
Genitiv = {
sg_m = "ίδιου", sg_f = "ίδιας", sg_n = "ίδιου",
pl_m = "ίδιων", pl_f = "ίδιων", pl_n = "ίδιων"
},
Acusativ = {
sg_m = "ίδιο", sg_f = "ίδια", sg_n = "ίδιο",
pl_m = "ίδιους", pl_f = "ίδιες", pl_n = "ίδια"
},
Vocativ = {
sg_m = "ίδιε", sg_f = "ίδια", sg_n = "ίδιο",
pl_m = "ίδιοι", pl_f = "ίδιες", pl_n = "ίδια"
},
}
},
{
input_word = "ανεξάρτητος",
fem_type = "η",
expected_forms = {
Nominativ = {
sg_m = "ανεξάρτητος", sg_f = "ανεξάρτητη", sg_n = "ανεξάρτητο",
pl_m = "ανεξάρτητοι", pl_f = "ανεξάρτητες", pl_n = "ανεξάρτητα"
},
Genitiv = {
sg_m = "ανεξάρτητου", sg_f = "ανεξάρτητης", sg_n = "ανεξάρτητου",
pl_m = "ανεξάρτητων", pl_f = "ανεξάρτητων", pl_n = "ανεξάρτητων"
},
Acusativ = {
sg_m = "ανεξάρτητο", sg_f = "ανεξάρτητη", sg_n = "ανεξάρτητο",
pl_m = "ανεξάρτητους", pl_f = "ανεξάρτητες", pl_n = "ανεξάρτητα"
},
Vocativ = {
sg_m = "ανεξάρτητε", sg_f = "ανεξάρτητη", sg_n = "ανεξάρτητο",
pl_m = "ανεξάρτητοι", pl_f = "ανεξάρτητες", pl_n = "ανεξάρτητα"
},
}
},
{
input_word = "αποδοτικός",
fem_type = "η", -- Ова е игнорирано од модулот за типот -ικός, но е вклучено за комплетност
expected_forms = {
Nominativ = {
sg_m = "αποδοτικός", sg_f = "αποδοτική", sg_n = "αποδοτικό",
pl_m = "αποδοτικοί", pl_f = "αποδοτικές", pl_n = "αποδοτικά"
},
Genitiv = {
sg_m = "αποδοτικού", sg_f = "αποδοτικής", sg_n = "αποδοτικού",
pl_m = "αποδοτικών", pl_f = "αποδοτικών", pl_n = "αποδοτικών"
},
Acusativ = {
sg_m = "αποδοτικό", sg_f = "αποδοτική", sg_n = "αποδοτικό",
pl_m = "αποδοτικούς", pl_f = "αποδοτικές", pl_n = "αποδοτικά"
},
Vocativ = {
sg_m = "αποδοτικέ", sg_f = "αποδοτική", sg_n = "αποδοτικό",
pl_m = "αποδοτικοί", pl_f = "αποδοτικές", pl_n = "αποδοτικά"
},
}
},
{
input_word = "αστικός",
fem_type = "η",
expected_forms = {
Nominativ = {
sg_m = "αστικός", sg_f = "αστική", sg_n = "αστικό",
pl_m = "αστικοί", pl_f = "αστικές", pl_n = "αστικά"
},
Genitiv = {
sg_m = "αστικού", sg_f = "αστικής", sg_n = "αστικού",
pl_m = "αστικών", pl_f = "αστικών", pl_n = "αστικών"
},
Acusativ = {
sg_m = "αστικό", sg_f = "αστική", sg_n = "αστικό",
pl_m = "αστικούς", pl_f = "αστικές", pl_n = "αστικά"
},
Vocativ = {
sg_m = "αστικέ", sg_f = "αστική", sg_n = "αστικό",
pl_m = "αστικοί", pl_f = "αστικές", pl_n = "αστικά"
},
}
},
{
input_word = "βαρετός",
fem_type = "η", -- женскиот род е βαρετή, значи 'η'
expected_forms = {
Nominativ = {
sg_m = "βαρετός", sg_f = "βαρετή", sg_n = "βαρετό",
pl_m = "βαρετοί", pl_f = "βαρετές", pl_n = "βαρετά"
},
Genitiv = {
sg_m = "βαρετού", sg_f = "βαρετής", sg_n = "βαρετού",
pl_m = "βαρετών", pl_f = "βαρετών", pl_n = "βαρετών"
},
Acusativ = {
sg_m = "βαρετό", sg_f = "βαρετή", sg_n = "βαρετό",
pl_m = "βαρετούς", pl_f = "βαρετές", pl_n = "βαρετά"
},
Vocativ = {
sg_m = "βαρετέ", sg_f = "βαρετή", sg_n = "βαρετό",
pl_m = "βαρετοί", pl_f = "βαρετές", pl_n = "βαρετά"
},
}
},
{
input_word = "δημοφιλής",
fem_type = "η", -- Женскиот род е исто така -ής, но аргументот svr не се користи за овој тип
expected_forms = {
Nominativ = {
sg_m = "δημοφιλής", sg_f = "δημοφιλής", sg_n = "δημοφιλές",
pl_m = "δημοφιλείς", pl_f = "δημοφιλείς", pl_n = "δημοφιλή"
},
Genitiv = {
sg_m = "δημοφιλούς", sg_f = "δημοφιλούς", sg_n = "δημοφιλούς",
pl_m = "δημοφιλών", pl_f = "δημοφιλών", pl_n = "δημοφιλών"
},
Acusativ = {
sg_m = "δημοφιλή", sg_f = "δημοφιλή", sg_n = "δημοφιλές",
pl_m = "δημοφιλείς", pl_f = "δημοφιλείς", pl_n = "δημοφιλή"
},
Vocativ = {
sg_m = "δημοφιλή", sg_f = "δημοφιλή", sg_n = "δημοφιλές",
pl_m = "δημοφιλείς", pl_f = "δημοφιλείς", pl_n = "δημοφιλή"
},
}
},
{
input_word = "επείγων",
fem_type = "", -- Нема специфичен женски тип како 'α' или 'η' за овој придавка што личи на партицип
expected_forms = {
Nominativ = {
sg_m = "επείγων", sg_f = "επείγουσα", sg_n = "επείγον",
pl_m = "επείγοντες", pl_f = "επείγουσες", pl_n = "επείγοντα"
},
Genitiv = {
sg_m = "επείγοντος", sg_f = "επείγουσας", sg_n = "επείγοντος",
pl_m = "επείγοντων", pl_f = "επείγουσων", pl_n = "επείγοντων"
},
Acusativ = {
sg_m = "επείγοντα", sg_f = "επείγουσα", sg_n = "επείγον",
pl_m = "επείγοντες", pl_f = "επείγουσες", pl_n = "επείγοντα"
},
Vocativ = {
sg_m = "επείγων", sg_f = "επείγουσα", sg_n = "επείγον",
pl_m = "επείγοντες", pl_f = "επείγουσες", pl_n = "επείγοντα"
},
}
},
{
input_word = "ντροπαλός",
fem_type = "η",
expected_forms = {
Nominativ = {
sg_m = "ντροπαλός", sg_f = "ντροπαλή", sg_n = "ντροπαλό",
pl_m = "ντροπαλοί", pl_f = "ντροπαλές", pl_n = "ντροπαλά"
},
Genitiv = {
sg_m = "ντροπαλού", sg_f = "ντροπαλής", sg_n = "ντροπαλού",
pl_m = "ντροπαλών", pl_f = "ντροπαλών", pl_n = "ντροπαλών"
},
Acusativ = {
sg_m = "ντροπαλό", sg_f = "ντροπαλή", sg_n = "ντροπαλό",
pl_m = "ντροπαλούς", pl_f = "ντροπαλές", pl_n = "ντροπαλά"
},
Vocativ = {
sg_m = "ντροπαλέ", sg_f = "ντροπαλή", sg_n = "ντροπαλό",
pl_m = "ντροπαλοί", pl_f = "ντροπαλές", pl_n = "ντροπαλά"
},
}
},
{
input_word = "ολόκληρος",
fem_type = "η",
expected_forms = {
Nominativ = {
sg_m = "ολόκληρος", sg_f = "ολόκληρη", sg_n = "ολόκληρο",
pl_m = "ολόκληροι", pl_f = "ολόκληρες", pl_n = "ολόκληρα"
},
Genitiv = {
sg_m = "ολόκληρου", sg_f = "ολόκληρης", sg_n = "ολόκληρου",
pl_m = "ολόκληρων", pl_f = "ολόκληρων", pl_n = "ολόκληρων"
},
Acusativ = {
sg_m = "ολόκληρο", sg_f = "ολόκληρη", sg_n = "ολόκληρο",
pl_m = "ολόκληρους", pl_f = "ολόκληρες", pl_n = "ολόκληρα"
},
Vocativ = {
sg_m = "ολόκληρε", sg_f = "ολόκληρη", sg_n = "ολόκληρο",
pl_m = "ολόκληροι", pl_f = "ολόκληρες", pl_n = "ολόκληρα"
},
}
},
{
input_word = "πονηρός",
fem_type = "η",
expected_forms = {
Nominativ = {
sg_m = "πονηρός", sg_f = "πονηρή", sg_n = "πονηρό",
pl_m = "πονηροί", pl_f = "πονηρές", pl_n = "πονηρά"
},
Genitiv = {
sg_m = "πονηρού", sg_f = "πονηρής", sg_n = "πονηρού",
pl_m = "πονηρών", pl_f = "πονηρών", pl_n = "πονηρών"
},
Acusativ = {
sg_m = "πονηρό", sg_f = "πονηρή", sg_n = "πονηρό",
pl_m = "πονηρούς", pl_f = "πονηρές", pl_n = "πονηρά"
},
Vocativ = {
sg_m = "πονηρέ", sg_f = "πονηρή", sg_n = "πονηρό",
pl_m = "πονηροί", pl_f = "πονηρές", pl_n = "πονηρά"
},
}
},
{
input_word = "πρόσφατος",
fem_type = "η",
expected_forms = {
Nominativ = {
sg_m = "πρόσφατος", sg_f = "πρόσφατη", sg_n = "πρόσφατο",
pl_m = "πρόσφατοι", pl_f = "πρόσφατες", pl_n = "πρόσφατα"
},
Genitiv = {
sg_m = "πρόσφατου", sg_f = "πρόσφατης", sg_n = "πρόσφατου",
pl_m = "πρόσφατων", pl_f = "πρόσφατων", pl_n = "πρόσφατων"
},
Acusativ = {
sg_m = "πρόσφατο", sg_f = "πρόσφατη", sg_n = "πρόσφατο",
pl_m = "πρόσφατους", pl_f = "πρόσφατες", pl_n = "πρόσφατα"
},
Vocativ = {
sg_m = "πρόσφατε", sg_f = "πρόσφατη", sg_n = "πρόσφατο",
pl_m = "πρόσφατοι", pl_f = "πρόσφατες", pl_n = "πρόσφατα"
},
}
},
{
input_word = "ταχυδρομικός",
fem_type = "η",
expected_forms = {
Nominativ = {
sg_m = "ταχυδρομικός", sg_f = "ταχυδρομική", sg_n = "ταχυδρομικό",
pl_m = "ταχυδρομικοί", pl_f = "ταχυδρομικές", pl_n = "ταχυδρομικά"
},
Genitiv = {
sg_m = "ταχυδρομικού", sg_f = "ταχυδρομικής", sg_n = "ταχυδρομικού",
pl_m = "ταχυδρομικών", pl_f = "ταχυδρομικών", pl_n = "ταχυδρομικών"
},
Acusativ = {
sg_m = "ταχυδρομικό", sg_f = "ταχυδρομική", sg_n = "ταχυδρομικό",
pl_m = "ταχυδρομικούς", pl_f = "ταχυδρομικές", pl_n = "ταχυδρομικά"
},
Vocativ = {
sg_m = "ταχυδρομικέ", sg_f = "ταχυδρομική", sg_n = "ταχυδρομικό",
pl_m = "ταχυδρομικοί", pl_f = "ταχυδρομικές", pl_n = "ταχυδρομικά"
},
}
},
{
input_word = "τοπικός",
fem_type = "η",
expected_forms = {
Nominativ = {
sg_m = "τοπικός", sg_f = "τοπική", sg_n = "τοπικό",
pl_m = "τοπικοί", pl_f = "τοπικές", pl_n = "τοπικά"
},
Genitiv = {
sg_m = "τοπικού", sg_f = "τοπικής", sg_n = "τοπικού",
pl_m = "τοπικών", pl_f = "τοπικών", pl_n = "τοπικών"
},
Acusativ = {
sg_m = "τοπικό", sg_f = "τοπική", sg_n = "τοπικό",
pl_m = "τοπικούς", pl_f = "τοπικές", pl_n = "τοπικά"
},
Vocativ = {
sg_m = "τοπικέ", sg_f = "τοπική", sg_n = "τοπικό",
pl_m = "τοπικοί", pl_f = "τοπικές", pl_n = "τοπικά"
},
}
},
{
input_word = "υδραυλικός",
fem_type = "η",
expected_forms = {
Nominativ = {
sg_m = "υδραυλικός", sg_f = "υδραυλική", sg_n = "υδραυλικό",
pl_m = "υδραυλικοί", pl_f = "υδραυλικές", pl_n = "υδραυλικά"
},
Genitiv = {
sg_m = "υδραυλικού", sg_f = "υδραυλικής", sg_n = "υδραυλικού",
pl_m = "υδραυλικών", pl_f = "υδραυλικών", pl_n = "υδραυλικών"
},
Acusativ = {
sg_m = "υδραυλικό", sg_f = "υδραυλική", sg_n = "υδραυλικό",
pl_m = "υδραυλικούς", pl_f = "υδραυλικές", pl_n = "υδραυλικά"
},
Vocativ = {
sg_m = "υδραυλικέ", sg_f = "υδραυλική", sg_n = "υδραυλικό",
pl_m = "υδραυλικοί", pl_f = "υδραυλικές", pl_n = "υδραυλικά"
},
}
},
{
input_word = "υπεύθυνος",
fem_type = "η",
expected_forms = {
Nominativ = {
sg_m = "υπεύθυνος", sg_f = "υπεύθυνη", sg_n = "υπεύθυνο",
pl_m = "υπεύθυνοι", pl_f = "υπεύθυνες", pl_n = "υπεύθυνα"
},
Genitiv = {
sg_m = "υπεύθυνου", sg_f = "υπεύθυνης", sg_n = "υπεύθυνου",
pl_m = "υπεύθυνων", pl_f = "υπεύθυνων", pl_n = "υπεύθυνων"
},
Acusativ = {
sg_m = "υπεύθυνο", sg_f = "υπεύθυνη", sg_n = "υπεύθυνο",
pl_m = "υπεύθυνους", pl_f = "υπεύθυνες", pl_n = "υπεύθυνα"
},
Vocativ = {
sg_m = "υπεύθυνε", sg_f = "υπεύθυνη", sg_n = "υπεύθυνο",
pl_m = "υπεύθυνοι", pl_f = "υπεύθυνες", pl_n = "υπεύθυνα"
},
}
},
{
input_word = "χαλαρός",
fem_type = "η",
expected_forms = {
Nominativ = {
sg_m = "χαλαρός", sg_f = "χαλαρή", sg_n = "χαλαρό",
pl_m = "χαλαροί", pl_f = "χαλαρές", pl_n = "χαλαρά"
},
Genitiv = {
sg_m = "χαλαρού", sg_f = "χαλαρής", sg_n = "χαλαρού",
pl_m = "χαλαρών", pl_f = "χαλαρών", pl_n = "χαλαρών"
},
Acusativ = {
sg_m = "χαλαρό", sg_f = "χαλαρή", sg_n = "χαλαρό",
pl_m = "χαλαρούς", pl_f = "χαλαρές", pl_n = "χαλαρά"
},
Vocativ = {
sg_m = "χαλαρέ", sg_f = "χαλαρή", sg_n = "χαλαρό",
pl_m = "χαλαροί", pl_f = "χαλαρές", pl_n = "χαλαρά"
},
}
},
}
-- Главна функција за тестирање
function p.run_tests(frame)
local errors = {}
local test_count = 0
local debug_raw_output = {} -- За чување на суровиот излез од главниот модул и парсираните форми
local case_functions = {
Nominativ = "Nominativ_case",
Genitiv = "Genitiv_case",
Acusativ = "Acusativ_case",
Vocativ = "Vocativ_case",
}
-- Редослед на формите во излезот на модулот
local form_keys = {"sg_m", "sg_f", "sg_n", "pl_m", "pl_f", "pl_n"}
local form_labels = {
sg_m = "Еднина Машки род",
sg_f = "Еднина Женски род",
sg_n = "Еднина Среден род",
pl_m = "Множина Машки род",
pl_f = "Множина Женски род",
pl_n = "Множина Среден род"
}
for _, test_case in ipairs(test_data) do
local adjective = test_case.input_word
local fem_type = test_case.fem_type
local expected_forms_adj = test_case.expected_forms
for case_name, func_name in pairs(case_functions) do
test_count = test_count + 1
-- Поставување на аргументите на фиктивната рамка
mock_frame.getParent().args[1] = adjective
mock_frame.getParent().args[2] = fem_type
-- Повикување на вистинската функција од главниот модул
local func = main_module[func_name]
local received_output_str = func(mock_frame)
local received_forms = parse_module_output(received_output_str)
-- Зачувај информации за дебагирање за суров излез и парсирани форми
table.insert(debug_raw_output, {
adjective = adjective,
case_name = case_name,
raw_output = received_output_str,
parsed_forms = received_forms
})
-- Споредување на формите
for i, key in ipairs(form_keys) do
local expected_form = expected_forms_adj[case_name][key]
local received_form = received_forms[i]
if expected_form ~= received_form then
table.insert(errors, {
adjective = adjective,
case_name = case_name,
form_label = form_labels[key],
expected = expected_form,
received = received_form
})
end
end
end
end
-- Креирање на табелата со резултати
local output_table = "{| class='wikitable sortable'\n"
output_table = output_table .. "|- \n! Придавка !! Падеж !! Форма !! Очекувано !! Добиено \n"
if #errors == 0 then
output_table = output_table .. "|- \n| colspan='5' | '''Сите " .. test_count .. " тестови поминаа успешно!''' \n"
else
for _, err in ipairs(errors) do
output_table = output_table .. "|- \n"
output_table = output_table .. "| " .. err.adjective .. " \n"
output_table = output_table .. "| " .. err.case_name .. " \n"
output_table = output_table .. "| " .. err.form_label .. " \n"
output_table = output_table .. "| " .. err.expected .. " \n"
output_table = output_table .. "| " .. err.received .. " \n"
end
end
-- Додајте го дебаг делот на крајот
output_table = output_table .. "\n|-\n| colspan='5' | '''ДЕБАГ: Суров излез од модулот и парсирани форми'''\n"
output_table = output_table .. "|- \n! Придавка !! Падеж !! Суров Излез !! Парсирани Форми \n"
for _, debug_entry in ipairs(debug_raw_output) do
output_table = output_table .. "|- \n"
output_table = output_table .. "| " .. debug_entry.adjective .. " \n"
output_table = output_table .. "| " .. debug_entry.case_name .. " \n"
output_table = output_table .. "| <nowiki>" .. debug_entry.raw_output .. "</nowiki> \n"
output_table = output_table .. "| <nowiki>" .. table.concat(debug_entry.parsed_forms, ", ") .. "</nowiki> \n"
end
output_table = output_table .. "|}"
return output_table
end
return p