Module:kum-decl/testcases

local tests = require "Module:UnitTests" local generate_forms = require "Module:kum-decl".generate_forms

local full_link = require "Module:links".full_link local kum = require "Module:languages".getByCode("kum") local function link(term) return full_link({ term = term, lang = kum }) end

local number_abbrs = { "sg", "pl" } local case_abbrs = { "nom", "acc", "dat", "loc", "abl", "gen" } local poss_abbrs = { "1_sg", "1_pl", "2_sg", "2_pl", "3" }

local function bare_ipairs(t) local i = 1 return function local v = t[i] if v then i = i + 1 return v		end end end

function tests.parse_noun_forms(text) local forms = {} local number_iter = bare_ipairs(number_abbrs) local is_back = false if text:find "back%s*$" then text = text:match("^(.-)%s*back%s*$") is_back = true end for line in text:gmatch("[^\n]+") do		local number = number_iter assert(number) local case_iter = bare_ipairs(case_abbrs) for word in line:gmatch("%S+") do			local case = case_iter assert(case, "no case for " .. word) forms[case .. "_" .. number] = word end end return forms, is_back end

local forms = ата    атаны   атагъа   атада    атадан    атаны аталар аталаны аталагъа аталарда аталардан аталаны

function tests:test_noun_declension local examples = { эл   элни   элге   элде    элден    элни          эллер эллени эллеге эллерде эллерден эллени, ата   атаны   атагъа   атада    атадан    атаны          аталар аталаны аталагъа аталарда аталардан аталаны, къол   къолну   къолгъа   къолда    къолдан    къолну          къоллар къолланы къоллагъа къолларда къоллардан къолланы, уьй   уьйню   уьйге   уьйде    уьйден    уьйню          уьйлер уьйлени уьйлеге уьйлерде уьйлерден уьйлени, яш   яшны   яшгъа   яшда    яшдан    яшны          яшлар яшланы яшлагъа яшларда яшлардан яшланы, юрт   юртну   юртгъа   юртда    юртдан    юртну          юртлар юртланы юртлагъа юртларда юртлардан юртланы          back, ёл   ёлну   ёлгъа   ёлда    ёлдан    ёлну		  ёллар ёлланы ёллагъа ёлларда ёллардан ёлланы		  back, }	for _, example in ipairs(examples) do		local lemma = example:match("^%S+") local expected, is_back = self.parse_noun_forms(example) self:equals_deep(			link(lemma),			generate_forms(lemma, nil, is_back),			expected) end end

function tests.parse_possessives(text) local lemma, rest = text:match "^([^\n]+)\n(.+)$" if not lemma then error("invalid format") end lemma = mw.text.trim(lemma) local poss_paradigms = {} local poss_abbr = bare_ipairs(poss_abbrs) -- Find pairs of lines containing at least one non-whitespace character. for forms in rest:gmatch "[^\n]*%S[^\n]+\n[^\n]*%S[^\n]+" do		poss_paradigms[poss_abbr] = tests.parse_noun_forms(forms) end -- Check that we have the right number of possessive paradigms. assert(poss_abbr == nil) poss_paradigms.lemma = lemma mw.logObject(poss_paradigms, "poss_paradigms") return poss_paradigms end

function tests:test_possessives local examples = { эл		элим элимни элиме элимде элимден элимни		эллерим эллеримни эллериме эллеримде эллеримден эллеримни		элибиз элибизни элибизге элибизде элибизден элибизни		эллерибиз эллерибизни эллерибизге эллерибизде эллерибизден эллерибизни		элинг элингни элинге элингде элингден элингни		эллеринг эллерингни эллеринге эллерингде эллерингден эллерингни		элигиз элигизни элигизге элигизде элигизден элигизни		эллеригиз эллеригизни эллеригизге эллеригизде эллеригизден эллеригизни		эли элин элине элинде элинден элини		эллери эллерин эллерине эллеринде эллеринден эллеринни, яш		яшым яшымны яшыма яшымда яшымдан яшымны		яшларым яшларымны яшларыма яшларымда яшларымдан яшларым		яшыбыз яшыбызны яшыбызгъа яшыбызда яшыбыздан яшыбызны		яшларым яшларымны яшларыма яшларымда яшларымдан яшларым		яшынг яшынгны яшынга яшынгда яшынгдан яшынгны		яшларынг яшларынгны яшларынга яшларынгда яшларынгдан яшларынгны		яшыгъыз яшыгъызны яшыгъызгъа яшыгъызда яшыгъыздан яшыгъызны		яшларыгъыз яшларыгъызны яшларыгъызгъа яшларыгъызда яшларыгъыздан яшларыгъызны		яшы яшын яшына яшында яшындан яшыны		яшлары яшларын яшларына яшларында яшларындан яшларыны }	for example in bare_ipairs(examples) do		assert(tests.parse_possessives(example)) end end

function tests.show return tests.parse_noun_forms(forms) end

return tests