Module:languages/testcases

local tests = require("Module:UnitTests")

local m_languages = require("Module:languages") local tag = require("Module:script utilities").tag_text

-- Auto-create language objects: langs.en -> language object for English. local langs = require ("Module:languages/cache")

local get_script = require("Module:scripts").getByCode

function tests:check(funcName) -- Use English language object to test for existence of function. local func = langs.en[funcName] or error("No function named " .. funcName .. " in language object.") local options = {} local function show_remaining_arguments(...) if select("#", ...) > 0 then local output = require "Module:array" for _, arg in ipairs {...} do				output:insert(", ") output:insert(tostring(arg)) end return output:concat else return "" end end return function(self, lang, example, expected, ...) function options.display(text) return tag(text, lang) end self:equals(tag(example, lang) .. " (" .. lang:getCanonicalName .. ", )" .. show_remaining_arguments(...),			func(lang, example, ...),			expected,			options) end end

function tests:test_makeEntryName local examples = { { langs.la, "hūmānitās", "humanitas" }, { langs.la, "coëō", "coeo" }, { langs.ha, "àzàhàr̃iyyā̀", "azahariyya" }, { langs.en, "alas!", "alas" }, { langs.es, "¿cómo te llamas?", "cómo te llamas" }, { langs.ru, "ӓ ё", "а ё" }, { langs.es, "¿ ?", "¿ ?" },		{ langs.es, "¡ !", "¡ !" },		{ langs.fr, "mais bien sûr !", "mais bien sûr" }, { langs.mul, "¡", "¡" }, { langs.grc, "Πηληῐ̈ᾰ́δης", "Πηληϊάδης" }, { langs.ar, "العَرَبِيَّة", "العربية" }, { langs.ar, "ٱ", "ٱ" }, -- special case: alif waṣla { langs.ar, "ـُ", "ـُ" }, -- special case: taṭwīl with vowel diacritic { langs.okm, "치〯", "치" }, "script-specific (no change when wrong script code is provided)", { langs.az, "ایشؽق", "ایشیق" }, { langs.az, "ایشؽق", "ایشؽق", get_script("Cyrl") }, -- no change with wrong script code }	self:iterate(examples, self:check("makeEntryName")) end

function tests:test_makeDisplayText local examples = { { langs.ta, "ஸ்ரீகாகுளம்", "ஶ்ரீகாகுளம்" }, }	self:iterate(examples, self:check("makeDisplayText")) end

function tests:test_makeSortKey local examples = { "diacritic removal", { langs.grc, "Πηληϊάδης Αἶνος", "ΠΗΛΗΙΑΔΗΣ ΑΙΝΟΣ" }, { langs.nv, "shį́į́dą́ą́ʼ", "SIIDAAZ" }, "dedicated sortkey modules", { langs.vi, "Tuyên ngôn toàn thế giới về nhân quyền của Liên Hợp Quốc", "TUYEN NGON TOAN! THE% GIOI% VE! NHAN QUYEN! CUA# LIEN HOP& QUOC%" }, { langs.zh, "命裡有時終須有，命裡無時莫強求", "口05衣07月02日06糸05頁03月02，口05衣07火08日06艸07弓08水02" }, { langs.zh, "⿱𡩧⿺進⿰貝招", "宀37" }, "dotted and dotless i", { langs.tr, "İzmir", "IZMIR" }, { langs.tr, "ışık", "ISIK" } }	self:iterate(examples, self:check("makeSortKey")) end

function tests:test_getWikipediaArticle local examples = { {"en", "English language"}, {"af", "Afrikaans"}, {"ae", "Avestan"}, {"ht", "Haitian Creole"}, {"ase", "American Sign Language"}, {"dv", "Maldivian language"}, {"eo", "Esperanto"}, {"goh", "Old High German"}, }

self:iterate(examples, function(self, lang, expected)		self:equals(lang, langs[lang]:getWikipediaArticle, expected)	end) end

function tests:test_makeWikipediaLink local examples = { {"en", "English"}, {"af", "Afrikaans"}, {"ae", "Avestan"}, }	self:iterate(examples, function(self, lang, expected)		self:equals(lang, langs[lang]:makeWikipediaLink, expected, {nowiki=1})	end) end

function tests:test_getFamily local examples = { {"en", "gmw-ang"}, {"ht", "crp"}, {"ase", "sgn"} }

self:iterate(examples, function(self, lang, expected)		self:equals(lang, langs[lang]:getFamily:getCode, expected)	end) end

function tests:test_getScriptCodes local examples = { {"en", {"Latn", "Brai", "Shaw", "Dsrt"}}, {"ht", {"Latn"}}, {"ase", {"Sgnw"}} }

self:iterate(examples, function(self, lang, expected)		self:equals_deep(lang, langs[lang]:getScriptCodes, expected, {})	end) end

function tests:test_getOtherNames local examples = { {"ht", {"Creole", "Haitian", "Kreyòl"}}, {"ase", {"Ameslan", "ASL"}} }

self:iterate(examples, function(self, lang, expected)		self:equals_deep(lang, langs[lang]:getOtherNames, expected, {})	end) end

function tests:test_getCategoryName local examples = { {"en", "English language"}, {"af", "Afrikaans language"}, {"av", "Avar language"}, {"ht", "Haitian Creole language"}, {"ase", "American Sign Language"} }

self:iterate(examples, function(self, lang, expected)		self:equals(lang, langs[lang]:getCategoryName, expected)	end) end

function tests:test_getWikidataItem local examples = { {"en", "Q1860"}, {"eo", "Q143"}, {"aql-pro", "Q18389588"}, {"mkh-ban-pro", nil}, }

self:iterate(examples, function(self, lang, expected)		self:equals(lang, langs[lang]:getWikidataItem, expected)	end) end

function tests:test_toJSON self:equals('en-toJSON', langs.en:toJSON, {"ancestors" : [ "en-ear" ], "code" : "en", "canonicalName" : "English", "wikimediaLanguages" : [ "en", "simple" ], "aliases" : [ "Modern English", "New English" ], "type" : [ "language", "full", "regular" ], "wikidataItem" : "Q1860", "varieties" : [ "Polari", "Yinglish" ], "scripts" : [ "Latn", "Brai", "Shaw", "Dsrt" ], "family" : "gmw-ang", "otherNames" : [], "categoryName" : "English language", "nonEtymological" : "en"}) end

function tests:test_getFull local examples = { { "de", "de" }, { "de-AT", "de" }, { "de-AT-vie", "de" }, { "gem", "gem" }, }

self:iterate(examples, function(self, lang, expected)		self:equals(lang, langs[lang]:getFull:getCode, expected)	end) end

for k, v in require "Module:table".sortedPairs(tests) do	if type(k) == "string" and k:sub(1, 5) == "test_" then local new_key = k:gsub('^test_(.+)$', 'testcases for ') tests[new_key], tests[k] = v, nil end end

return tests