Module:User:Erutuon/he-translit-omit-nonconsonantal/testcases

-- Taken verbatim from Module:he-translit local examples = [[ בַּיִת	bayiṯ בֵּית	bēṯ בָּֽתִּים	bāttīm אָ֫תָּה	ʾā́ttā -- stressed qamats always ā אָֽתָּה	ʾāttā -- meteg for unstressed qamats that is ā (normally would be o) אָכְלָה	ʾoḵlā -- “food” - unstressed qamats before sheva normally o אָֽכְלָה	ʾāḵəlā -- “she ate” מַחֲנֶה	maḥăne בָּרָא	bārā רֶגֶל	reḡel כֹּהֵן	kōhēn מֶלֶךְ	meleḵ מַמְלָכָה	mamlāḵā הַמַּמְלָכָה	hammamlāḵā הַלְּלוּיָהּ	halləlūyāh הַלְלוּיָהּ	haləlūyāh יָדַע	yāḏaʿ שָׁבוּעַ	šāḇū́aʿ רוּחַ	rū́aḥ גָּבֹהַּ	gāḇṓah גָּבֹ֫הַּ	gāḇṓah -- avoid adding two stress marks מָשִׁיחַ	māšī́aḥ מָשִׁ֫יחַ	māšī́aḥ -- avoid adding two stress marks רֵיחַ	rḗaḥ שָׂדֶה	śāḏe שְׂדֵה	śəḏē בָּנַי	bānay בְּנֵי	bənē צָרְכִּי	ṣorkī בֵּלְטְשַׁאצַּר	bēlṭəšaṣṣar חָכְמָה	ḥoḵmā -- no sheva rules apply; have to go with a default שִׁפְרָה	šip̄rā שָׁכְבְּךָ	šoḵbəḵā הָפְכָּה	hop̄kā -- made-up word, but a particular potentially problematic Unicode situation קָטְבּוֹ	qoṭbō -- another particular potentially problematic Unicode situation נִשְׂרְפָה	niśrəp̄ā בָּנָיו	bānāw בָּנֶיהָ	bānehā מִצְוֹת	miṣwōṯ עָוֺן	ʿāwōn זִוּוּג	ziwwūḡ רֹאשׁ	rōš רֵאשִׁית	rēšīṯ רִאשׁוֹן	rīšōn מְלָאכָה	məlāḵā מְלֶאכֶת	məleḵeṯ חֵטְא	ḥēṭ בָּרָאתָ	bārāṯā חַטֹּאות	ḥaṭṭōṯ יְראוּ	yərū וַיֶּאְסֹר	wayyeʾsōr הָחְלַט	hoḥlaṭ וַיֵּבְךְּ	wayyēḇk וַיֵּ֫בְךְּ	wayyēḇk -- omit accent on final syllable before silent sheva אַרְאֶךָּ	ʾarʾekkā וַיַּשְׁקְ	wayyašq אַתְּ	ʾatt וּוָווֹ	ūwāwō וָו	wāw תָּו	tāw קַו	qaw לָאו	lāw חַי	ḥay חָי	ḥāy -- pausal פִּיו	pīw כִּסְלֵו	kislēw גּוֹי	gōy גֹּי	gōy גֹּיִים	gōyīm רָאוּי	rāʾūy קִיא	qī יָבִיאוּ	yāḇīʾū יְבִיאוּן	yəḇīʾūn מֵאוּן	mēʾūn מֵיאוּן	mēʾūn בּוֹאוּ	bōʾū בֹּאוּ	bōʾū בּוּאוּ	būʾū -- made-up word, but may help identify the issue אָבִיאָה	ʾāḇīʾā מֵאָה	mēʾā גֵּיאָהּ	gēʾāh אָבוֹאָה	ʾāḇōʾā אָבֹאָה	ʾāḇōʾā נְשׂוּאָה	nəśūʾā קִיאוֹ	qīʾō גֵּאוֹ	gēʾō גֵּיאוֹ	gēʾō בּוֹאוֹ	bōʾō בֹּאוֹ	bōʾō מִלּוּאוֹ	millūʾō מִי	mī אִיִּים	ʾiyyīm אִיּוֹב	ʾiyyōḇ אִיּוּן	ʾiyyūn אַיִן	ʾayin בּוֹא	bō יְפֵהפֶה	yəp̄ēp̄e אֹהֶל	ʾōhel הָאֹהֱלָה	hāʾōhĕlā אָהֳלוֹ	ʾohŏlō אָהָלְךָ	ʾoholəḵā -- qamats qamats sheva perhaps always ooə in segolate nouns with pronominal suffix; however, verbs follow the same pattern but have long ā, so this may be an impossible condition to use יִשָּׂשכָר	yiśśāḵār -- Still undecided if this actually needs to be handled הוֹשִׁיעָה נָּא	hōšīʿā nnā עַד בֹּאֲךָ	ʿaḏ bōʾăḵā וַיַּשְׁקְ אֶת הַצֹּאן	wayyašq ʾeṯ haṣṣōn בְּנֵי בְרָק	bənē ḇərāq בְרָק	ḇərāq אִישׁ יְהוּדִי הָיָה בְּשׁוּשַׁן הַבִּירָה וּשְׁמוֹ מָרְדֳּכַי בֶּן יָאִיר בֶּן־שִׁמְעִי בֶּן־קִישׁ אִישׁ יְמִינִי׃	ʾīš yəhūḏī hāyā bəšūšan habbīrā ūšəmō mordŏḵay ben yāʾīr ben-šimʿī ben-qīš ʾīš yəmīnī. אִ֣ישׁ יְהוּדִ֔י הָיָ֖ה בְּשׁוּשַׁ֣ן הַבִּירָ֑ה וּשְׁמ֣וֹ מָרְדֳּכַ֗י בֶּ֣ן יָאִ֧יר בֶּן־שִׁמְעִ֛י בֶּן־קִ֖ישׁ אִ֥ישׁ יְמִינִֽי׃	ʾīš yəhūḏī hāyā bəšūšan habbīrā ūšəmō mordŏḵay ben yāʾīr ben-šimʿī ben-qīš ʾīš yəmīnī. -- fully accented verse; stress should not be indicated in the final syllable וַיְהִי הַמַּבּוּל אַרְבָּעִים יוֹם עַל־הָאָרֶץ וַיִּרְבּוּ הַמַּיִם וַיִּשְׂאוּ אֶת־הַתֵּבָה וַתָּרָם מֵעַל הָאָרֶץ׃	wayhī hammabbūl ʾarbāʿīm yōm ʿal-hāʾā́reṣ wayyirbū hammáyim wayyiśʾū ʾeṯ-hattēḇā wattā́rom mēʿal hāʾā́reṣ. -- a reminder of why this is hard וַיְהִ֧י הַמַּבּ֛וּל אַרְבָּעִ֥ים י֖וֹם עַל־הָאָ֑רֶץ וַיִּרְבּ֣וּ הַמַּ֗יִם וַיִּשְׂאוּ֙ אֶת־הַתֵּבָ֔ה וַתָּ֖רָם מֵעַ֥ל הָאָֽרֶץ׃	wayhī hammabbūl ʾarbāʿīm yōm ʿal-hāʾā́reṣ wayyirbū hammáyim wayyiśʾū ʾeṯ-hattēḇā wattā́rom mēʿal hāʾā́reṣ. -- fully accented verse version of the above וַיַּ֤רְא אֱלֹהִים֙ אֶת־כָּל־אֲשֶׁ֣ר עָשָׂ֔ה וְהִנֵּה־ט֖וֹב מְאֹ֑ד וַֽיְהִי־עֶ֥רֶב וַֽיְהִי־בֹ֖קֶר י֥וֹם הַשִּׁשִּֽׁי׃	wayyar ʾĕlōhīm ʾeṯ-kol-ʾăšer ʿāśā wəhinnē-ṭōḇ məʾōḏ wáyhī-ʿéreḇ wáyhī-ḇṓqer yōm haššiššī. -- implicit ktiv/qre that would be nice to have הִוא	hī יְרוּשָׁלִַם	yərūšāláyim יְר֣וּשָׁלִַ֔ם	yərūšāláyim -- with accent: incorrect order with no combining grapheme joiner יְרוּשָׁלִָם	yərūšālā́yim -- pausal form יְרוּשָׁלָֽ͏ִם	yərūšālā́yim -- with meteg and combining grapheme joiner (which keeps meteg between vowel points) יְרוּשָׁלְַמָה	yərūšāláymā יְרוּשָׁלְָמָה	yərūšālā́ymā -- ktiv male tests חַיָּיב	ḥayyāḇ חַוָּוה	ḥawwā הֱוֵוה	hĕwē הַיְינוּ	haynū הִתְכַּוְּונוּ	hiṯkawwənū גַּוְונָא	gawnā מְייוּחָד	məyūḥāḏ -- there is no way to tell that it really should be məyuḥāḏ, but anyway this test is for the double yod כְּדַאי	kəḏay כּוּלָּם	kullām -- shuruk does not necessarily imply a long vowel קִידּוּשׁ	qiddūš -- chiriq male does not necessarily imply a long vowel -- כל כָּל	kol כָּל כָּל כָּל	kol kol kol כָּל הַכָּבוֹד	kol hakkāḇōḏ כָל	ḵol בְּלִי כָל מְאוּם	bəlī ḵol məʾūm מִכָּל	mikkol מִכָּל מָקוֹם	mikkol māqōm בְּכָל	bəḵol בְּכָל מָקוֹם	bəḵol māqōm לְכָל	ləḵol לְכָל מָקוֹם	ləḵol māqōm כְּכָל	kəḵol כְּכָל הַנִּרְאֶה	kəḵol hannirʾe שֶׁכָּל	šekkol שֶׁכָּל מָקוֹם	šekkol māqōm שֶׁמִּכָּל	šemmikkol שֶׁמִּכָּל מָקוֹם	šemmikkol māqōm שֶׁבְּכָל	šebbəḵol שֶׁבְּכָל מָקוֹם	šebbəḵol māqōm שֶׁלְּכָל	šelləḵol שֶׁלְּכָל מָקוֹם	šelləḵol māqōm וְכָל	wəḵol וְכָל מָקוֹם	wəḵol māqōm וּבְכָל	ūḇəḵol וּבְכָל מָקוֹם	ūḇəḵol māqōm וּכְכָל	ūḵəḵol וּכְכָל מָקוֹם	ūḵəḵol māqōm הַכָּל	hakkol בַּכָּל	bakkol לַכָּל	lakkol מֵהַכָּל	mēhakkol שֶׁהַכָּל	šehakkol שֶׁבַּכָּל	šebbakkol שֶׁלַּכָּל	šellakkol וְהַכָּל	wəhakkol וּבַכָּל	ūḇakkol וְלַכָּל	wəlakkol וְכַכָּל	wəḵakkol דְּכָל	dəḵol שַׁכָּל	šakkol -- not kol כָּלָה	kālā הֵיכָל	hēḵāl מַאֲכָל	maʾăḵāl מִיכָל	mīḵāl מְכָל	məḵāl שָׁכָל	šāḵāl שֻׁכָּל	šukkāl מוּכָל	mūḵāl -- rare word-internal he mater-lectionis (for fun) פְּדָהצוּר	pəḏāṣūr עֲשָׂהאֵל	ʿăśāʾēl ]]

-- The above can be regenerated with this code in Module:he-translit: --[[ local examples = {} -- paste examples table here

function tests:run_tests local output = require "Module:array" for _, row in ipairs(examples) do		if type(row) == "string" then output:insert("-- " .. row) else if row[3] then output:insert(row[1] .. "\t" .. row[2] .. " -- " .. row[3]) else output:insert(row[1] .. "\t" .. row[2]) end end end return require "Module:debug".highlight(output:concat("\n"), { lang = "text" }) end --]]

local tests = require('Module:UnitTests')

local he_translit = require('Module:User:Erutuon/he-translit-omit-nonconsonantal')

local full_link = require('Module:links').full_link local lang = require('Module:languages').getByCode('he') local sc = require('Module:scripts').getByCode('Hebr') local function link(term) return full_link{lang = lang, sc = sc, term = term} end

local function parse_examples(example_string) local examples = {} for line in mw.text.gsplit(example_string, "\n") do		local rest, comment = line:match("^(.-)%-%-%s*([^\n]+)%s*$") if not rest then rest = line end rest = mw.text.trim(rest) if rest == "" then table.insert(examples, comment) else local example = mw.text.split(rest, "\t") assert(#example == 2, #example .. "\t" .. mw.text.jsonEncode(rest)) table.insert(example, comment) table.insert(examples, example) end end return examples end

local function add_qamats_qatan_comments(examples) local qamats_qatan = mw.ustring.char(0x05C7) for _, example in ipairs(examples) do		if type(example) == "table" and example[1]:find(qamats_qatan, 1, true) then example[3] = (example[3] and example[3] .. "; " or "") .. "with qamats qatan code point" end end return examples end

function tests:test_translit self:iterate(		add_qamats_qatan_comments(parse_examples(examples)),		function(self, Hebrew, translit, comment)			assert(type(Hebrew) == "string", type(Hebrew))			assert(type(translit) == "string", type(translit))			return self:equals(link(Hebrew), mw.ustring.toNFC(he_translit.transliterate(Hebrew)), translit, {comment = comment})		end) end

return tests