19declare(strict_types=1);
24use PHPUnit\Framework\TestCase;
34 $shipped = [
'item [0]' =>
'Eintrag',
'item [1]' =>
'Einträge'];
35 $entries = [
'item [0]' =>
'Eintrag',
'item [1]' =>
'Einträge NEU'];
46 $shipped = [
'item [0]' =>
'Eintrag',
'item [1]' =>
'Einträge'];
47 $entries = [
'item [1]' =>
'Einträge NEU'];
55 $shipped = [
'before' =>
'A',
'item [0]' =>
'Eintrag',
'item [1]' =>
'Einträge',
'after' =>
'B'];
58 [
'before',
'item',
'after'],
66 $shipped = [
'item [0]' =>
'Eintrag',
'item [1]' =>
'Einträge'];
67 $entries = [
'item [0]' =>
'Eintrag',
'item [1]' =>
'Einträge NEU',
'item [5]' =>
'Geister-Form'];
71 $this->assertSame([
'item' =>
'Einträge NEU'], $collapsed);
77 $shipped = [
'item [0]' =>
'Eintrag',
'item [1]' =>
'Einträge'];
78 $entries = [
'item' =>
'Veraltet',
'item [0]' =>
'Eintrag',
'item [1]' =>
'Einträge NEU'];
85 $shipped = [
'item [0]' =>
'Eintrag',
'item [1]' =>
'Einträge',
'plain' =>
'X'];
86 $entries = [
'plain' =>
'Y',
'other' =>
'Z'];
93 $shipped = [
'plain' =>
'X'];
94 $entries = [
'plain' =>
'Y',
'other [0]' =>
'looks like a form but is not one'];
105 $shipped = [
'item' =>
'Eigener Wert',
'item [0]' =>
'Form 0',
'item [1]' =>
'Form 1'];
113 $shipped = [
'item [0]' =>
'jeden',
'item [1]' =>
'dva',
'item [2]' =>
'mnoho'];
114 $entries = [
'item [0]' =>
'jeden',
'item [1]' =>
'dva',
'item [2]' =>
'mnoho NEU'];
125 $shipped = [
'item [0]' =>
'jeden',
'item [1]' =>
'dva',
'item [2]' =>
'mnoho'];
126 $entries = [
'item [0]' =>
'jeden',
'item [1]' =>
'dva',
'item [2]' =>
''];
137 $shipped = [
'item [0]' =>
'Eintrag',
'item [1]' =>
'Einträge'];
138 $entries = [
'item' =>
'Alter DB-Wert'];
146 $shipped = [
'item [0]' =>
'jeden',
'item [1]' =>
'dva',
'item [2]' =>
'mnoho'];
147 $entries = [
'item' =>
'Alter DB-Wert'];
154 $shipped = [
'item [0]' =>
'Eintrag'];
155 $entries = [
'item' =>
'Alter DB-Wert'];
163 $shipped = [
'item [0]' =>
'Eintrag',
'item [1]' =>
'Einträge'];
164 $entries = [
'item' =>
'Alter DB-Wert',
'item [1]' =>
'Neue Form 1'];
172 $shipped = [
'item [0]' =>
'Eintrag',
'item [1]' =>
'Einträge'];
173 $entries = [
'item' =>
'Alter DB-Wert',
'item [0]' =>
'Neue Form 0'];
176 [
'item [0]' =>
'Neue Form 0',
'item [1]' =>
'Alter DB-Wert'],
183 $shipped = [
'item [0]' =>
'Eintrag',
'item [1]' =>
'Einträge'];
184 $entries = [
'plain' =>
'X',
'item [0]' =>
'A',
'item [1]' =>
'B'];
192 $shipped = [
'item [0]' =>
'Eintrag',
'item [1]' =>
'Einträge'];
193 $entries = [
'item' =>
true];
200 $shipped = [
'item [0]' =>
'Eintrag',
'item [1]' =>
'Einträge'];
207 $shipped = [
'item [0]' =>
'Eintrag',
'item [1]' =>
'Einträge'];
214 $shipped = [
'item [0]' =>
'Eintrag',
'item [1]' =>
'Einträge',
'plain' =>
'X'];
221 $shipped = [
'plain [0]' =>
'X'];
222 $shipped[
'plain'] =
'irrelevant';
239 $shipped = [
'item [0]' =>
'Eintrag',
'item [1]' =>
'Einträge'];
246 $shipped = [
'item [0]' =>
'jeden',
'item [1]' =>
'dva',
'item [2]' =>
'mnoho'];
254 $shipped = [
'item [0]' =>
'Eintrag',
'item [1]' =>
'Einträge'];
263 $shipped = [
'item [0]' =>
'Eintrag',
'item [1]' =>
'Einträge',
'item_singular' =>
'Ein Eintrag'];
276 $shipped = [
'item' =>
'Eigener Wert',
'item [0]' =>
'Form 0',
'item [1]' =>
'Form 1'];
Reads the shipped .po of a migrated module and maintains its per-installation overlay: the ....
static pluralMessageOf(string $key, array $shipped_entries)
The identifier of the plural message of $shipped_entries (form keys included) $key belongs to,...
static mapLegacyPluralValues(array $entries, array $shipped_entries)
$entries with a plain value of the identifier of a plural message of $shipped_entries moved to the ke...
static defaultFormKeyOf(string $identifier, array $shipped_entries)
The key of the default form (the last, see PluralForms) of the plural message $identifier of $shipped...
static collapsePluralForms(array $entries, array $shipped_entries)
$entries (see the class docblock) as the database holds them: the forms of every plural message of $s...
Pure helpers folding a plural message's forms (keys via PluralFormKey) into one lng_data row and back...
testCollapsesToTheLastFormForAThreeFormLanguage()
Three forms (Czech-shaped): the identifier's value is the LAST form's, not msgstr[1]; see PluralForms...
testAFormIndexOutsideTheShippedFormCountIsIgnored()
A form index the shipped message does not declare (e.g.
testEntriesUnrelatedToAnyPluralMessageAreKeptAsIs()
testPluralMessageOfResolvesAFormKeyToItsIdentifier()
testCollapsesEveryFormToTheIdentifierWithTheDefaultFormsValue()
testDefaultFormKeyOfMapsThePlainIdentifierToItsLastFormKey()
The plain identifier of a plural message (import line, "add new variable") maps to the key of its def...
testAFormMissingFromEntriesFallsBackToItsShippedValue()
A form missing from $entries counts with its shipped value, not as empty (a partial submission must n...
testCollapsesToTheClosestNonEmptyFormWhenTheLastFormIsEmpty()
An empty last form falls back to the closest non-empty form before it (PluralForms::defaultValueForCo...
testAPlainValueIsStillMappedWhenOnlyANonDefaultFormIsAlreadyPresent()
A present non-default form key does not stop the plain value from mapping to the absent default form ...
testPreservesNonStringValueTypes()
Values of any type round-trip: loadOverlay()/resolveMigratedModule() pass a boolean "is local change"...
testAPlainValueNextToFormsIsDroppedInFavourOfTheForms()
A plain value under the plural identifier loses to the form keys.
testDefaultFormKeyOfIsNullForAFormKeyItself()
A key that already is a form key is no plain identifier: null.
testWithoutAnyPluralMessageInShippedEntriesIsAnIdentity()
testDefaultFormKeyOfIsNullForAnIdentifierShippedBothAsItsOwnEntryAndWithFormKeys()
An identifier shipped as its own entry and with form keys is not mapped either (pluralMessageOf()'s g...
testPluralMessageOfResolvesTheBareIdentifierToo()
testPluralMessageOfIsNullForAKeyThatMerelyLooksLikeAFormKey()
testDefaultFormKeyOfMapsToTheLastFormOfAThreeFormLanguage()
testPluralMessageOfIsNullForAnOrdinaryIdentifier()
testEntriesWithNoPlainPluralIdentifierAreUnaffected()
testDefaultFormKeyOfIsNullForASingularKey()
A singular key next to a plural message (e.g.
testAPlainValueOfAThreeFormLanguagesPluralIdentifierBecomesTheLastForm()
More than two forms: the plain value becomes the LAST form's key ("item [2]" for three forms).
testAnIdentifierShippedBothAsItsOwnEntryAndWithFormKeysIsNotTreatedAsPlural()
An identifier shipped as its own entry and with form keys (contradictory data) is not treated as plur...
testPluralMessageOfIsNullForAnUnknownIdentifier()
testDefaultFormKeyOfIsNullForAnUnknownIdentifier()
testThePluralIdentifierIsPlacedAtThePositionOfItsFirstFormKey()
Entries keep the position of their identifier's first form key.
testAPlainValueOfAPluralIdentifierBecomesItsDefaultForm()
A plain value under a plural identifier (a local change from before the module had plurals,...
testAPlainValueOfASingleFormLanguagesPluralIdentifierBecomesFormZero()
testAPlainValueIsDroppedWhenItsDefaultFormKeyIsAlreadyPresent()
An already present default form key wins; the plain value is dropped.