diff --git a/spec/i18next_plurals_spec.cr b/spec/i18next_plurals_spec.cr new file mode 100644 index 00000000..ec14f418 --- /dev/null +++ b/spec/i18next_plurals_spec.cr @@ -0,0 +1,208 @@ +require "spec" +require "../src/invidious/helpers/i18next.cr" + +resolver = I18next::Plurals::RESOLVER + +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, + "en" => I18next::Plurals::PluralForms::Single_not_one, + "fr" => I18next::Plurals::PluralForms::Single_gt_one, + "ga" => I18next::Plurals::PluralForms::Special_Irish, + "gd" => I18next::Plurals::PluralForms::Special_Scottish_Gaelic, + "he" => I18next::Plurals::PluralForms::Special_Hebrew, + "is" => I18next::Plurals::PluralForms::Special_Icelandic, + "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::Single_gt_one, + "pt-PT" => I18next::Plurals::PluralForms::Single_not_one, + "pt-BR" => I18next::Plurals::PluralForms::Single_gt_one, + "ro" => I18next::Plurals::PluralForms::Special_Romanian, + "su" => I18next::Plurals::PluralForms::None, + "sk" => I18next::Plurals::PluralForms::Special_Czech_Slovak, + "sl" => I18next::Plurals::PluralForms::Special_Slovenian, + +} + +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"}, + ], + "fr" => [ + {num: 0, suffix: ""}, + {num: 1, suffix: ""}, + {num: 10, suffix: "_plural"}, + ], + "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" => [ + {num: 0, suffix: ""}, + {num: 1, suffix: ""}, + {num: 10, suffix: "_plural"}, + ], + "pt-PT" => [ + {num: 0, suffix: "_plural"}, + {num: 1, suffix: ""}, + {num: 10, suffix: "_plural"}, + ], + "pt-BR" => [ + {num: 0, suffix: ""}, + {num: 1, suffix: ""}, + {num: 10, suffix: "_plural"}, + ], + "ro" => [ + {num: 0, suffix: "_1"}, + {num: 1, suffix: "_0"}, + {num: 20, suffix: "_2"}, + ], + "su" => [ + {num: 0, suffix: "_0"}, + {num: 1, suffix: "_0"}, + {num: 10, suffix: "_0"}, + ], + "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"}, + ], +} + +describe "i18next_Plural_Resolver" do + describe "get_plural_form" do + FORM_TESTS.each do |locale, form| + it "returns the right plural form for locale '#{locale}'" do + resolver.get_plural_form(locale).should eq(form) + end + end + end + + describe "get_suffix" do + SUFFIX_TESTS.each do |locale, data| + it "returns the right suffix for locale '#{locale}'" do + data.each do |d| + resolver.get_suffix(locale, d[:num]).should eq(d[:suffix]) + end + end + end + end +end