mirror of
https://github.com/luanti-org/luanti.git
synced 2025-09-30 19:22:14 +00:00
Minor refactor to the Plural-Forms
parser (#16489)
This commit is contained in:
parent
053ca6287a
commit
cc6b56b034
3 changed files with 158 additions and 174 deletions
|
@ -25,40 +25,59 @@ TEST_CASE("test translations")
|
|||
{
|
||||
SECTION("Plural-Forms function for translations")
|
||||
{
|
||||
#define REQUIRE_FORM_SIZE(x) {REQUIRE(form); REQUIRE(form->size() == (x));}
|
||||
// Test cases from https://www.gnu.org/software/gettext/manual/html_node/Plural-forms.html
|
||||
auto form = GettextPluralForm::parseHeaderLine(L"Plural-Forms: nplurals=2; plural=n != 1;");
|
||||
#define REQUIRE_FORM_SIZE(x) {REQUIRE(form); REQUIRE(form.size() == (x));}
|
||||
// Basic test cases
|
||||
auto form = GettextPluralForm(L"Plural-Forms: nplurals=2; plural=1;");
|
||||
REQUIRE_FORM_SIZE(2);
|
||||
CHECK((*form)(0) == 1);
|
||||
CHECK((*form)(1) == 0);
|
||||
CHECK((*form)(2) == 1);
|
||||
CHECK(form(0) == 1);
|
||||
|
||||
form = GettextPluralForm::parseHeaderLine(L"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2;");
|
||||
form = GettextPluralForm(L"");
|
||||
REQUIRE(form.size() == 0);
|
||||
CHECK(form(0) == 0);
|
||||
|
||||
// Test cases from https://www.gnu.org/software/gettext/manual/html_node/Plural-forms.html
|
||||
form = GettextPluralForm(L"Plural-Forms: nplurals=2; plural=n != 1;");
|
||||
REQUIRE_FORM_SIZE(2);
|
||||
CHECK(form(0) == 1);
|
||||
CHECK(form(1) == 0);
|
||||
CHECK(form(2) == 1);
|
||||
|
||||
form = GettextPluralForm(L"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2;");
|
||||
REQUIRE_FORM_SIZE(3);
|
||||
CHECK((*form)(0) == 2);
|
||||
CHECK((*form)(1) == 0);
|
||||
CHECK((*form)(102) == 1);
|
||||
CHECK((*form)(111) == 1);
|
||||
CHECK(form(0) == 2);
|
||||
CHECK(form(1) == 0);
|
||||
CHECK(form(102) == 1);
|
||||
CHECK(form(111) == 1);
|
||||
|
||||
form = GettextPluralForm::parseHeaderLine(L"Plural-Forms: nplurals=3; "
|
||||
form = GettextPluralForm(L"Plural-Forms: nplurals=3; "
|
||||
"plural=n%10==1 && n%100!=11 ? 0 : "
|
||||
"n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;");
|
||||
REQUIRE_FORM_SIZE(3);
|
||||
CHECK((*form)(0) == 2);
|
||||
CHECK((*form)(1) == 0);
|
||||
CHECK((*form)(102) == 1);
|
||||
CHECK((*form)(104) == 1);
|
||||
CHECK((*form)(111) == 2);
|
||||
CHECK((*form)(112) == 2);
|
||||
CHECK((*form)(121) == 0);
|
||||
CHECK((*form)(122) == 1);
|
||||
CHECK(form(0) == 2);
|
||||
CHECK(form(1) == 0);
|
||||
CHECK(form(102) == 1);
|
||||
CHECK(form(104) == 1);
|
||||
CHECK(form(111) == 2);
|
||||
CHECK(form(112) == 2);
|
||||
CHECK(form(121) == 0);
|
||||
CHECK(form(122) == 1);
|
||||
|
||||
// Edge cases
|
||||
form = GettextPluralForm::parseHeaderLine(L"Plural-Forms: nplurals=3; plural= (n-1+1)<=1 ? n||1?0:1 : 1?(!!2):2;");
|
||||
form = GettextPluralForm(L"Plural-Forms: nplurals=3; plural= (n-1+1)<=1 ? n||1?0:1 : 1?(!!2):2;");
|
||||
REQUIRE_FORM_SIZE(3);
|
||||
CHECK((*form)(0) == 0);
|
||||
CHECK((*form)(1) == 0);
|
||||
CHECK((*form)(2) == 1);
|
||||
CHECK(form(0) == 0);
|
||||
CHECK(form(1) == 0);
|
||||
CHECK(form(2) == 1);
|
||||
|
||||
form = GettextPluralForm(L"Plural-Forms: nplurals=2; plural=4/n;");
|
||||
REQUIRE_FORM_SIZE(2);
|
||||
CHECK(form(1) == 4);
|
||||
CHECK(form(0) == 0);
|
||||
|
||||
form = GettextPluralForm(L"Plural-Forms: nplurals=2; plural=7%n;");
|
||||
REQUIRE_FORM_SIZE(2);
|
||||
CHECK(form(3) == 1);
|
||||
CHECK(form(0) == 0);
|
||||
#undef REQUIRE_FORM_SIZE
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue