invidious/spec/i18next_plurals_spec.cr

232 lines
6.2 KiB
Crystal

require "spectator"
require "../src/invidious/helpers/i18next.cr"
Spectator.configure do |config|
config.fail_blank
config.randomize
end
def resolver
I18next::Plurals::RESOLVER
end
FORM_TESTS = {
"ach" => I18next::Plurals::PluralForms::Single_gt_one,
"ar" => I18next::Plurals::PluralForms::Special_Arabic,
"be" => I18next::Plurals::PluralForms::Dual_Slavic,
"cy" => I18next::Plurals::PluralForms::Special_Welsh,
"fr" => I18next::Plurals::PluralForms::Special_French_Portuguese,
"en" => I18next::Plurals::PluralForms::Single_not_one,
"es" => I18next::Plurals::PluralForms::Special_Spanish_Italian,
"ga" => I18next::Plurals::PluralForms::Special_Irish,
"gd" => I18next::Plurals::PluralForms::Special_Scottish_Gaelic,
"he" => I18next::Plurals::PluralForms::Special_Hebrew,
"hr" => I18next::Plurals::PluralForms::Special_Hungarian_Serbian,
"is" => I18next::Plurals::PluralForms::Special_Icelandic,
"it" => I18next::Plurals::PluralForms::Special_Spanish_Italian,
"jv" => I18next::Plurals::PluralForms::Special_Javanese,
"kw" => I18next::Plurals::PluralForms::Special_Cornish,
"lt" => I18next::Plurals::PluralForms::Special_Lithuanian,
"lv" => I18next::Plurals::PluralForms::Special_Latvian,
"mk" => I18next::Plurals::PluralForms::Special_Macedonian,
"mnk" => I18next::Plurals::PluralForms::Special_Mandinka,
"mt" => I18next::Plurals::PluralForms::Special_Maltese,
"or" => I18next::Plurals::PluralForms::Special_Odia,
"pl" => I18next::Plurals::PluralForms::Special_Polish_Kashubian,
"pt" => I18next::Plurals::PluralForms::Special_French_Portuguese,
"pt-PT" => I18next::Plurals::PluralForms::Single_gt_one,
"pt-BR" => I18next::Plurals::PluralForms::Special_French_Portuguese,
"ro" => I18next::Plurals::PluralForms::Special_Romanian,
"sk" => I18next::Plurals::PluralForms::Special_Czech_Slovak,
"sl" => I18next::Plurals::PluralForms::Special_Slovenian,
"su" => I18next::Plurals::PluralForms::None,
"sr" => I18next::Plurals::PluralForms::Special_Hungarian_Serbian,
}
SUFFIX_TESTS = {
"ach" => [
{num: 0, suffix: ""},
{num: 1, suffix: ""},
{num: 10, suffix: "_plural"},
],
"ar" => [
{num: 0, suffix: "_0"},
{num: 1, suffix: "_1"},
{num: 2, suffix: "_2"},
{num: 3, suffix: "_3"},
{num: 4, suffix: "_3"},
{num: 104, suffix: "_3"},
{num: 11, suffix: "_4"},
{num: 99, suffix: "_4"},
{num: 199, suffix: "_4"},
{num: 100, suffix: "_5"},
],
"be" => [
{num: 0, suffix: "_2"},
{num: 1, suffix: "_0"},
{num: 5, suffix: "_2"},
],
"cy" => [
{num: 0, suffix: "_2"},
{num: 1, suffix: "_0"},
{num: 3, suffix: "_2"},
{num: 8, suffix: "_3"},
],
"en" => [
{num: 0, suffix: "_plural"},
{num: 1, suffix: ""},
{num: 10, suffix: "_plural"},
],
"es" => [
{num: 0, suffix: "_2"},
{num: 1, suffix: "_0"},
{num: 10, suffix: "_2"},
{num: 6_000_000, suffix: "_1"},
],
"fr" => [
{num: 0, suffix: "_0"},
{num: 1, suffix: "_0"},
{num: 10, suffix: "_2"},
{num: 4_000_000, suffix: "_1"},
{num: 6_260_000, suffix: "_2"},
],
"ga" => [
{num: 1, suffix: "_0"},
{num: 2, suffix: "_1"},
{num: 3, suffix: "_2"},
{num: 7, suffix: "_3"},
{num: 11, suffix: "_4"},
],
"gd" => [
{num: 1, suffix: "_0"},
{num: 2, suffix: "_1"},
{num: 3, suffix: "_2"},
{num: 20, suffix: "_3"},
],
"he" => [
{num: 0, suffix: "_3"},
{num: 1, suffix: "_0"},
{num: 2, suffix: "_1"},
{num: 3, suffix: "_3"},
{num: 20, suffix: "_2"},
{num: 21, suffix: "_3"},
{num: 30, suffix: "_2"},
{num: 100, suffix: "_2"},
{num: 101, suffix: "_3"},
],
"is" => [
{num: 1, suffix: ""},
{num: 2, suffix: "_plural"},
],
"jv" => [
{num: 0, suffix: "_0"},
{num: 1, suffix: "_1"},
],
"kw" => [
{num: 1, suffix: "_0"},
{num: 2, suffix: "_1"},
{num: 3, suffix: "_2"},
{num: 4, suffix: "_3"},
],
"lt" => [
{num: 1, suffix: "_0"},
{num: 2, suffix: "_1"},
{num: 10, suffix: "_2"},
],
"lv" => [
{num: 1, suffix: "_0"},
{num: 2, suffix: "_1"},
{num: 0, suffix: "_2"},
],
"mk" => [
{num: 1, suffix: ""},
{num: 2, suffix: "_plural"},
{num: 0, suffix: "_plural"},
{num: 11, suffix: "_plural"},
{num: 21, suffix: ""},
{num: 31, suffix: ""},
{num: 311, suffix: "_plural"},
],
"mnk" => [
{num: 0, suffix: "_0"},
{num: 1, suffix: "_1"},
{num: 2, suffix: "_2"},
],
"mt" => [
{num: 1, suffix: "_0"},
{num: 2, suffix: "_1"},
{num: 11, suffix: "_2"},
{num: 20, suffix: "_3"},
],
"or" => [
{num: 2, suffix: "_1"},
{num: 1, suffix: "_0"},
],
"pl" => [
{num: 0, suffix: "_2"},
{num: 1, suffix: "_0"},
{num: 5, suffix: "_2"},
],
"pt-BR" => [
{num: 0, suffix: "_0"},
{num: 1, suffix: "_0"},
{num: 10, suffix: "_2"},
{num: 42, suffix: "_2"},
{num: 9_000_000, suffix: "_1"},
],
"pt-PT" => [
{num: 0, suffix: ""},
{num: 1, suffix: ""},
{num: 10, suffix: "_plural"},
{num: 9_000_000, suffix: "_plural"},
],
"ro" => [
{num: 0, suffix: "_1"},
{num: 1, suffix: "_0"},
{num: 20, suffix: "_2"},
],
"sk" => [
{num: 0, suffix: "_2"},
{num: 1, suffix: "_0"},
{num: 5, suffix: "_2"},
],
"sl" => [
{num: 5, suffix: "_0"},
{num: 1, suffix: "_1"},
{num: 2, suffix: "_2"},
{num: 3, suffix: "_3"},
],
"su" => [
{num: 0, suffix: "_0"},
{num: 1, suffix: "_0"},
{num: 10, suffix: "_0"},
],
"sr" => [
{num: 1, suffix: "_0"},
{num: 51, suffix: "_0"},
{num: 32, suffix: "_1"},
{num: 100, suffix: "_2"},
{num: 100_000, suffix: "_2"},
],
}
Spectator.describe "i18next_Plural_Resolver" do
describe "get_plural_form" do
sample FORM_TESTS do |locale, form|
it "returns the right plural form for locale '#{locale}'" do
expect(resolver.get_plural_form(locale)).to eq(form)
end
end
end
describe "get_suffix" do
sample SUFFIX_TESTS do |locale, tests|
it "returns the right suffix for locale '#{locale}'" do
tests.each do |d|
expect(resolver.get_suffix(locale, d[:num])).to eq(d[:suffix])
end
end
end
end
end