mediawiki-extensions-Scribunto/tests/phpunit/Engines/LuaCommon/LanguageLibraryTests.lua
Umherirrender f15b30cdb7 tests: Fix i18n part of test data to match new translation
https://translatewiki.net/w/i.php?title=MediaWiki:Duration-minutes/kaa&oldid=11412949

Follow-Up: Ibc5e8cee9e076c8952eb24839d5e97d4eca4ccf4
Change-Id: If352609c5ad7d9a52a94c737cac3f0f1a47de2e0
2023-02-13 20:39:57 +01:00

466 lines
12 KiB
Lua
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

local testframework = require 'Module:TestFramework'
local langs = nil
local function getLangs()
if langs == nil then
langs = {
mw.language.new( 'en' ),
mw.language.new( 'kaa' ),
mw.language.new( 'fa' ),
mw.language.new( '[[bogus]]' ),
}
end
return langs
end
local function test_method( func, ... )
local langs = getLangs()
local ret = {}
for i = 1, #langs do
local got = { pcall( langs[i][func], langs[i], ... ) }
if table.remove( got, 1 ) then
ret[i] = got
else
ret[i] = string.gsub( got[1], '^%S+:%d+: ', '' )
end
end
return unpack( ret )
end
local function test_method_lang( lang, func, ... )
local obj = mw.language.new( lang )
return obj[func]( obj, ... )
end
local function test_plural( lang )
local obj = mw.language.new( lang )
local ret1, ret2 = '', ''
local ret3, ret4 = '', ''
for i = 0, 29 do
ret1 = ret1 .. obj:convertPlural( i, 'a', 'b', 'c', 'd', 'e' )
ret2 = ret2 .. obj:convertPlural( i, { 'a', 'b', 'c', 'd', 'e' } )
ret3 = ret3 .. obj:plural( i, 'a', 'b', 'c', 'd', 'e' )
ret4 = ret4 .. obj:plural( i, { 'a', 'b', 'c', 'd', 'e' } )
end
if ret1 ~= ret2 or ret1 ~= ret3 or ret1 ~= ret4 then
error( "Plural tests don't match:" ..
" " .. ret1
" " .. ret2
" " .. ret3
" " .. ret4
)
end
return ret1
end
local function test_multi( func, ... )
local ret = {}
for i = 1, select( '#', ... ) do
ret[i] = func( select( i, ... ) )
end
return unpack( ret, 1, select( '#', ... ) )
end
local function test_fetchLanguageNames( ... )
local ret = mw.language.fetchLanguageNames( ... )
if type( ret ) == 'table' then
return {
en = ret.en,
ru = ret.ru,
}
else
return ret
end
end
local function test_parseFormattedNumber()
local langs = getLangs()
local ret = {}
for i = 1, #langs do
local ok, num = pcall( langs[i].formatNum, langs[i], 123456.78901 )
local got = { pcall( langs[i].parseFormattedNumber, langs[i], num ) }
if table.remove( got, 1 ) then
ret[i] = got
else
ret[i] = string.gsub( got[1], '^%S+:%d+: ', '' )
end
end
return unpack( ret )
end
return testframework.getTestProvider( {
{ name = 'fetchLanguageName (en)', func = mw.language.fetchLanguageName,
args = { 'en' },
expect = { 'English' }
},
{ name = 'fetchLanguageName (ru)', func = mw.language.fetchLanguageName,
args = { 'ru' },
expect = { 'русский' }
},
{ name = 'fetchLanguageName (en,ru)', func = mw.language.fetchLanguageName,
args = { 'en', 'ru' },
expect = { 'английский' }
},
{ name = 'fetchLanguageName (ru,en)', func = mw.language.fetchLanguageName,
args = { 'ru', 'en' },
expect = { 'Russian' }
},
{ name = 'fetchLanguageName ([[bogus]])', func = mw.language.fetchLanguageName,
args = { '[[bogus]]' },
expect = { '' }
},
{ name = 'fetchLanguageName (en,[[bogus]])', func = mw.language.fetchLanguageName,
args = { 'en', '[[bogus]]' },
expect = { 'English' }
},
{ name = 'fetchLanguageNames ()', func = test_fetchLanguageNames,
args = {},
expect = { { en = 'English', ru = 'русский' } }
},
{ name = 'fetchLanguageNames (de)', func = test_fetchLanguageNames,
args = { 'de' },
expect = { { en = 'Englisch', ru = 'Russisch' } }
},
{ name = 'fetchLanguageNames ([[bogus]])', func = test_fetchLanguageNames,
args = { '[[bogus]]' },
expect = { { en = 'English', ru = 'Russian' } }
},
{ name = 'getFallbacksFor', func = test_multi,
args = { mw.language.getFallbacksFor, 'en', 'de', 'arz', '[[bogus]]' },
expect = { {}, { 'en' }, { 'ar', 'en' }, {} }
},
{ name = 'isKnownLanguageTag', func = test_multi,
args = { mw.language.isKnownLanguageTag, 'en', 'not-a-real-code', 'extension code', '[[bogus]]' },
expect = { true, false, false, false }
},
{ name = 'isSupportedLanguage', func = test_multi,
args = { mw.language.isSupportedLanguage, 'en', 'not-a-real-code', 'extension code', '[[bogus]]' },
expect = { true, false, false, false }
},
{ name = 'isValidBuiltInCode', func = test_multi,
args = { mw.language.isValidBuiltInCode, 'en', 'not-a-real-code', 'extension code', '[[bogus]]' },
expect = { true, true, false, false }
},
{ name = 'isValidCode', func = test_multi,
args = { mw.language.isValidCode, 'en', 'not-a-real-code', 'extension code', '[[bogus]]' },
expect = { true, true, true, false }
},
{ name = 'mw.language.new', func = test_multi, type = 'ToString',
args = { mw.language.new, 'en', 'ru', '[[bogus]]' },
expect = { 'table', 'table', 'table' }
},
{ name = 'lang:getCode', func = test_method,
args = { 'getCode' },
expect = {
{ 'en' },
{ 'kaa' },
{ 'fa' },
{ '[[bogus]]' },
}
},
{ name = 'lang:getFallbackLanguages', func = test_method,
args = { 'getFallbackLanguages' },
expect = {
{ {} },
{ { 'kk-latn', 'kk-cyrl', 'en' } },
{ { 'en' } },
{ {} },
}
},
{ name = 'lang:isRTL', func = test_method,
args = { 'isRTL' },
expect = {
{ false },
{ false },
{ true },
"language code '[[bogus]]' is invalid",
}
},
{ name = 'lang:lc', func = test_method,
args = { 'lc', 'IX' },
expect = {
{ 'ix' },
{ 'ix' }, -- Probably not actually right, but it's what LanguageKaa returns
{ 'ix' },
"language code '[[bogus]]' is invalid",
}
},
{ name = 'lang:lcfirst', func = test_method,
args = { 'lcfirst', 'IX' },
expect = {
{ 'iX' },
{ 'ıX' },
{ 'iX' },
"language code '[[bogus]]' is invalid",
}
},
{ name = 'lang:uc', func = test_method,
args = { 'uc', 'ix' },
expect = {
{ 'IX' },
{ 'IX' }, -- Probably not actually right, but it's what LanguageKaa returns
{ 'IX' },
"language code '[[bogus]]' is invalid",
}
},
{ name = 'lang:ucfirst', func = test_method,
args = { 'ucfirst', 'ix' },
expect = {
{ 'Ix' },
{ 'İx' },
{ 'Ix' },
"language code '[[bogus]]' is invalid",
}
},
{ name = 'lang:caseFold', func = test_method,
args = { 'caseFold', 'ix' },
expect = {
{ 'IX' },
{ 'IX' }, -- Probably not actually right, but it's what LanguageKaa returns
{ 'IX' },
"language code '[[bogus]]' is invalid",
}
},
{ name = 'lang:formatNum', func = test_method,
args = { 'formatNum', 123456.78901 },
expect = {
{ '123,456.78901' },
{ "123\194\160456,78901" },
{ '۱۲۳٬۴۵۶٫۷۸۹۰۱' },
"language code '[[bogus]]' is invalid",
}
},
{ name = 'lang:formatNum (NaN)', func = test_method,
args = { 'formatNum', 0/0 },
expect = {
"bad argument #1 to 'formatNum' (NaN)",
"bad argument #1 to 'formatNum' (NaN)",
"bad argument #1 to 'formatNum' (NaN)",
"language code '[[bogus]]' is invalid",
}
},
{ name = 'lang:formatNum (Inf)', func = test_method,
args = { 'formatNum', 1/0 },
expect = {
"bad argument #1 to 'formatNum' (infinite)",
"bad argument #1 to 'formatNum' (infinite)",
"bad argument #1 to 'formatNum' (infinite)",
"language code '[[bogus]]' is invalid",
}
},
{ name = 'lang:formatNum (-Inf)', func = test_method,
args = { 'formatNum', -1/0 },
expect = {
"bad argument #1 to 'formatNum' (infinite)",
"bad argument #1 to 'formatNum' (infinite)",
"bad argument #1 to 'formatNum' (infinite)",
"language code '[[bogus]]' is invalid",
}
},
{ name = 'lang:formatDate', func = test_method,
args = { 'formatDate', 'Y-F-d H:i:s', '20140305123456' },
expect = {
{ '2014-March-05 12:34:56' },
{ '2014-Mart-05 12:34:56' },
{ '۲۰۱۴-مارس-۰۵ ۱۲:۳۴:۵۶' },
"language code '[[bogus]]' is invalid",
}
},
{ name = 'lang:formatDuration', func = test_method,
args = { 'formatDuration', 86461 },
expect = {
{ "1 day, 1 minute and 1 second" },
{ "1 kún, 1 minut hám 1 секунд" },
{ "۱ روز، ۱ دقیقه و ۱ ثانیه" },
"language code '[[bogus]]' is invalid",
}
},
{ name = 'lang:formatDuration (hours and minutes)', func = test_method,
args = { 'formatDuration', 86461, { 'hours', 'minutes' } },
expect = {
{ "24 hours and 1 minute" },
{ "24 сағат hám 1 minut" },
{ "۲۴ ساعت و ۱ دقیقه" },
"language code '[[bogus]]' is invalid",
}
},
{ name = 'lang:parseFormattedNumber', func = test_parseFormattedNumber,
args = {},
expect = {
{ 123456.78901 },
{ 123456.78901 },
{ 123456.78901 },
"language code '[[bogus]]' is invalid",
}
},
{ name = 'lang:convertPlural (en)', func = test_plural,
args = { 'en' },
expect = { 'babbbbbbbbbbbbbbbbbbbbbbbbbbbb' }
},
{ name = 'lang:convertPlural (pl)', func = test_plural,
args = { 'pl' },
expect = { 'cabbbcccccccccccccccccbbbccccc' }
},
{ name = 'lang:convertPlural (bogus)', func = test_plural,
args = { '[[bogus]]' },
expect = "language code '[[bogus]]' is invalid",
},
{ name = 'lang:convertGrammar (ru)', func = test_method_lang,
args = { 'ru', 'convertGrammar', '**ия', 'genitive' },
expect = { '**ии' }
},
{ name = 'lang:convertGrammar (bogus)', func = test_method_lang,
args = { '[[bogus]]', 'convertGrammar', '**ия', 'genitive' },
expect = "language code '[[bogus]]' is invalid",
},
{ name = 'lang:grammar (ru)', func = test_method_lang,
args = { 'ru', 'grammar', 'genitive', '**ия' },
expect = { '**ии' }
},
{ name = 'lang:grammar (bogus)', func = test_method_lang,
args = { '[[bogus]]', 'grammar', 'genitive', '**ия' },
expect = "language code '[[bogus]]' is invalid",
},
{ name = 'lang:gender (male)', func = test_method,
args = { 'gender', 'male', 'masculine', 'feminine', 'neutral' },
expect = {
{ 'masculine' },
{ 'masculine' },
{ 'masculine' },
"language code '[[bogus]]' is invalid",
}
},
{ name = 'lang:gender (female)', func = test_method,
args = { 'gender', 'female', 'masculine', 'feminine', 'neutral' },
expect = {
{ 'feminine' },
{ 'feminine' },
{ 'feminine' },
"language code '[[bogus]]' is invalid",
}
},
{ name = 'lang:gender (male, with sequence)', func = test_method,
args = { 'gender', 'male', { 'masculine', 'feminine', 'neutral' } },
expect = {
{ 'masculine' },
{ 'masculine' },
{ 'masculine' },
"language code '[[bogus]]' is invalid",
}
},
{ name = 'lang:getArrow (forward)', func = test_method,
args = { 'getArrow', 'forwards' },
expect = {
{ "" },
{ "" },
{ "" },
"language code '[[bogus]]' is invalid",
}
},
{ name = 'lang:getArrow (right)', func = test_method,
args = { 'getArrow', 'right' },
expect = {
{ "" },
{ "" },
{ "" },
{ "" },
}
},
{ name = 'lang:getDir', func = test_method,
args = { 'getDir' },
expect = {
{ "ltr" },
{ "ltr" },
{ "rtl" },
"language code '[[bogus]]' is invalid",
}
},
{ name = 'lang:getDirMark', func = test_method,
args = { 'getDirMark' },
expect = {
{ "\226\128\142" },
{ "\226\128\142" },
{ "\226\128\143" },
"language code '[[bogus]]' is invalid",
}
},
{ name = 'lang:getDirMark opposite', func = test_method,
args = { 'getDirMark', true },
expect = {
{ "\226\128\143" },
{ "\226\128\143" },
{ "\226\128\142" },
"language code '[[bogus]]' is invalid",
}
},
{ name = 'lang:getDirMarkEntity', func = test_method,
args = { 'getDirMarkEntity' },
expect = {
{ "‎" },
{ "‎" },
{ "‏" },
"language code '[[bogus]]' is invalid",
}
},
{ name = 'lang:getDirMarkEntity opposite', func = test_method,
args = { 'getDirMarkEntity', true },
expect = {
{ "‏" },
{ "‏" },
{ "‎" },
"language code '[[bogus]]' is invalid",
}
},
{ name = 'lang:getDurationIntervals', func = test_method,
args = { 'getDurationIntervals', 86461 },
expect = {
{ { days = 1, minutes = 1, seconds = 1 } },
{ { days = 1, minutes = 1, seconds = 1 } },
{ { days = 1, minutes = 1, seconds = 1 } },
"language code '[[bogus]]' is invalid",
}
},
{ name = 'lang:getDurationIntervals (hours and minutes)', func = test_method,
args = { 'getDurationIntervals', 86461, { 'hours', 'minutes' } },
expect = {
{ { hours = 24, minutes = 1 } },
{ { hours = 24, minutes = 1 } },
{ { hours = 24, minutes = 1 } },
"language code '[[bogus]]' is invalid",
}
},
} )