Module:Unicode data/testcases
Appearance
![]() | This is the test cases page for the module Module:Unicode data. Results of the test cases. |
-- Example Unit tests for [[Module:Bananas]]. Click talk page to run tests.
local p = require 'Module:UnitTests'
local Unicode_data = require 'Module:Unicode data'
function p:iterate(examples, func)
if type(examples) ~= 'table' then
error('First argument of iterate should be a table, not ' .. type(examples) .. '.')
end
if type(func) == 'string' then
func = self[func]
for i, example in ipairs(examples) do
if type(example) == 'table' then
func(self, unpack(example))
else
error('iterate does not know what to do with example number ' .. i .. ', whose type is ' .. type(example) .. '.')
end
end
else
error('Second argument of iterate should be a string, not ' .. type(func) .. '.')
end
end
local U = mw.ustring.char
local function show(codepoint)
if Unicode_data.is_printable(codepoint) then
local printed_codepoint = U(codepoint)
if mw.ustring.toNFC(printed_codepoint) ~= printed_codepoint then
printed_codepoint = ("&#x%X;"):format(codepoint)
end
if Unicode_data.is_combining(codepoint) then
printed_codepoint = "◌" .. printed_codepoint
end
return ("U+%04X: %s"):format(codepoint, printed_codepoint)
else
return ("U+%04X"):format(codepoint)
end
end
function p:check_lookup_name(codepoint, name)
self:equals(show(codepoint), Unicode_data.lookup_name(codepoint), name)
end
function p:test_lookup_name()
local examples = {
{ 0x0000, "<control-0000>" },
{ 0x007F, "<control-007F>" },
{ 0x00C1, "LATIN CAPITAL LETTER A WITH ACUTE" },
{ 0x0300, "COMBINING GRAVE ACCENT" },
{ 0x0378, "<reserved-0378>" },
{ 0x1B44, "BALINESE ADEG ADEG" },
{ 0x1F71, "GREEK SMALL LETTER ALPHA WITH OXIA" },
{ 0x3555, "CJK UNIFIED IDEOGRAPH-3555" },
{ 0xAC01, "HANGUL SYLLABLE GAG" },
{ 0xD5FF, "HANGUL SYLLABLE HEH" },
{ 0xDC00, "<surrogate-DC00>", },
{ 0xEEEE, "<private-use-EEEE>" },
{ 0xFDD1, "<noncharacter-FDD1>", },
{ 0xFFFD, "REPLACEMENT CHARACTER" },
{ 0xFFFF, "<noncharacter-FFFF>" },
{ 0x1F4A9, "PILE OF POO" },
{ 0xE0000, "<reserved-E0000>" },
{ 0xF0F0F, "<private-use-F0F0F>" },
{ 0x10FFFF, "<noncharacter-10FFFF>" },
}
self:iterate(examples, "check_lookup_name")
end
function p:check_is_combining(codepoint, expected)
self:equals(
("%s (%s)"):format(show(codepoint), Unicode_data.lookup_name(codepoint)),
Unicode_data.is_combining(codepoint),
expected
)
end
function p:test_is_combining()
local examples = {
{ 0x0300, true },
{ 0x0060, false },
}
self:iterate(examples, "check_is_combining")
end
function p:check_lookup_script(codepoint, expected)
self:equals(
("%s (%s)"):format(show(codepoint), Unicode_data.lookup_name(codepoint)),
Unicode_data.lookup_script(codepoint),
expected)
end
function p:test_lookup_script()
local examples = {
{ 0x0061, "Latn" },
{ 0x002F, "Zyyy" },
{ 0x0300, "Zinh" },
{ 0x0378, "Zzzz" },
{ 0x0398, "Grek" },
{ 0x03E2, "Copt" },
{ 0x2014, "Zyyy" },
}
self:iterate(examples, "check_lookup_script")
end
function p:check_get_best_script(str, expected)
self:equals(
str,
Unicode_data.get_best_script(str),
expected)
end
function p:test_get_best_script()
local examples = {
-- Two examples from [[Template talk:Lang#Italicisation of Halkomelem]]
{ "lá:yelhp", "Latn" },
{ "xʷməθkʷəy̓əm", nil },
}
self:iterate(examples, "check_get_best_script")
end
local new_p = {}
for k, v in pairs(p) do
if type(k) == "string" then
new_p[k:gsub("^test_", "test ")] = v
else
new_p[k] = v
end
end
p = new_p
return p