PluginProbe ʕ •ᴥ•ʔ
MailPoet – Newsletters, Email Marketing, and Automation / 5.12.13
MailPoet – Newsletters, Email Marketing, and Automation v5.12.13
5.33.0 5.32.0 5.31.0 5.30.0 5.29.0 5.28.1 5.28.0 5.27.0 5.26.0 5.26.1 5.25.0 5.24.0 4.43.0 4.43.1 4.44.0 4.44.1 4.45.0 4.46.0 4.47.0 4.48.0 4.48.1 4.48.2 4.49.0 4.49.1 4.5.0 4.5.1 4.5.2 4.50.0 4.50.1 4.51.0 4.51.1 4.51.2 4.52.0 4.53.0 4.54.0 4.55.0 4.56.0 4.57.0 4.58.0 4.58.1 4.58.2 4.6.0 4.6.1 4.6.2 4.7.0 4.7.1 4.8.0 4.8.1 4.9.0 5.0.0 5.0.1 5.0.2 5.1.0 5.1.1 5.10.0 5.10.1 5.11.0 5.12.0 5.12.1 5.12.10 5.12.11 5.12.12 5.12.13 5.12.2 5.12.3 5.12.4 5.12.5 5.12.6 5.12.7 5.12.8 5.12.9 5.13.0 5.13.1 5.13.2 5.14.0 5.14.1 5.14.2 5.14.3 5.15.0 5.15.1 5.16.0 5.16.1 5.16.2 5.16.3 5.16.4 5.17.0 5.17.1 5.17.2 5.17.3 5.17.4 5.17.5 5.17.6 5.18.0 5.19.0 5.2.0 5.2.1 5.2.2 5.2.3 5.20.0 5.21.0 5.21.1 5.21.2 5.21.3 5.22.0 5.22.1 5.22.2 5.22.3 5.22.4 5.23.0 5.23.1 5.23.2 5.3.0 5.3.1 5.3.2 5.3.3 5.3.4 5.3.5 5.3.6 5.3.7 5.4.0 5.4.1 5.4.2 5.5.0 5.5.1 5.5.2 5.6.0 5.6.1 5.6.2 5.6.3 5.6.4 5.7.0 5.7.1 5.8.0 5.8.1 5.9.0 3.0.0-beta.15 3.7.1 3.0.0-beta.16 3.7.2 3.0.0-beta.17 3.7.3 3.0.0-beta.18 3.7.4 3.0.0-beta.19 3.7.5 3.0.0-beta.2 3.7.6 3.0.0-beta.20 3.7.8 3.0.0-beta.21 3.70.0 3.0.0-beta.22 3.71.0 3.0.0-beta.23 3.71.1 3.0.0-beta.23.1 3.71.2 3.0.0-beta.23.2 3.71.3 3.0.0-beta.24 3.72.0 3.0.0-beta.25 3.73.0 3.0.0-beta.26 3.73.1 3.0.0-beta.27 3.73.2 3.0.0-beta.28 3.74.0 3.0.0-beta.29 3.74.1 3.0.0-beta.3 3.74.2 3.0.0-beta.30 3.74.3 3.0.0-beta.31 3.75.0 3.0.0-beta.32 3.75.1 3.0.0-beta.33 3.76.0 3.0.0-beta.33.1 3.77.0 3.0.0-beta.34.0.0 3.77.1 3.0.0-beta.36.0.0 3.78.0 3.0.0-beta.36.0.1 3.79.0 3.0.0-beta.36.2.0 3.8 3.0.0-beta.36.3.0 3.8.1 3.0.0-beta.36.3.1 3.8.2 3.0.0-beta.37.0.0 3.8.3 3.0.0-beta.4 3.8.4 3.0.0-beta.5 3.8.5 3.0.0-beta.6 3.8.6 3.0.0-beta.7 3.80.0 3.0.0-beta.7.1 3.81.0 3.0.0-beta.8 3.82.0 3.0.0-beta.9 3.83.0 3.0.0-rc.1.0.0 3.84.0 3.0.0-rc.1.0.1 3.84.1 3.0.0-rc.1.0.2 3.85.0 3.0.0-rc.1.0.3 3.85.1 3.0.0-rc.1.0.4 3.86.0 3.0.0-rc.2.0.0 3.87.0 3.0.0-rc.2.0.1 3.87.1 3.0.0-rc.2.0.2 3.87.2 3.0.0-rc.2.0.3 3.88.0 3.0.1 3.88.1 3.0.2 3.88.2 3.0.3 3.89.0 3.0.4 3.89.1 3.0.5 3.89.2 3.0.6 3.89.3 3.0.7 3.89.4 3.0.8 3.9.0 3.0.9 3.9.1 3.1.0 3.90.0 3.10 3.90.1 3.10.1 3.90.2 3.100.0 3.91.0 3.100.1 3.91.1 3.100.2 3.92.0 3.101.0 3.92.1 3.101.1 3.93.0 3.102.0 3.93.1 3.102.1 3.94.0 3.103.0 3.95.0 3.103.1 3.95.1 3.11.0 3.96.0 3.11.1 3.96.1 3.11.2 3.97.0 3.11.3 3.98.0 3.11.4 3.98.1 3.11.5 3.99.0 3.12.0 3.99.1 3.12.1 4.0.0 3.13.0 4.0.1 3.14.0 4.1.0 3.14.1 4.1.1 3.15.0 4.10.0 3.16.0 4.11.0 3.16.1 4.11.1 3.16.2 4.12.0 3.16.3 4.12.1 3.17.0 4.12.2 3.17.1 4.13.0 3.17.2 4.14.0 3.18.0 4.15.0 3.18.1 4.16.0 3.18.2 4.17.0 3.19.0 4.17.1 3.19.1 4.18.0 3.19.2 4.18.1 3.19.3 4.19.0 3.2.0 4.2.0 3.2.1 4.20.0 3.2.2 4.20.1 3.2.3 4.20.2 3.2.4 4.21.0 3.2.5 4.22.0 3.20.0 4.22.1 3.21.0 4.22.2 3.21.1 4.23.0 3.22.0 4.24.0 3.23.0 4.25.0 3.23.1 4.26.0 3.23.2 4.26.1 3.24.0 4.27.0 3.25.0 4.28.0 3.25.1 4.29.0 3.26.0 4.3.0 3.26.1 4.3.1 3.27.0 4.30.0 3.28.0 4.31.0 3.29.0 4.31.1 3.3.0 4.32.0 3.3.1 4.33.0 3.3.2 4.34.0 3.3.3 4.35.0 3.3.4 4.35.1 3.3.5 4.36.0 3.3.6 4.37.0 3.30.0 4.38.0 3.31.0 4.39.0 3.31.1 4.4.0 3.32.0 4.40.0 3.32.1 4.41.0 3.32.2 4.41.1 3.33.0 4.41.2 3.34.0 4.41.3 3.34.1 4.42.0 3.34.2 4.42.1 3.34.3 3.34.4 3.35.0 3.35.1 3.35.3 3.35.4 3.36.0 3.37.0 3.37.1 3.37.2 3.37.3 3.38.0 3.38.1 3.39.0 3.39.1 3.39.2 3.4.0 3.4.1 3.4.2 3.4.3 3.4.4 3.40.0 3.40.1 3.41.0 3.41.1 3.41.2 3.42.0 3.42.1 3.42.2 3.42.3 3.43.0 3.43.1 3.44.0 3.45.0 3.45.1 3.46.0 3.46.1 3.46.10 3.46.11 3.46.12 3.46.13 3.46.14 3.46.2 3.46.3 3.46.4 3.46.5 3.46.6 3.46.7 3.46.8 3.46.9 3.47.0 3.47.1 3.47.10 3.47.11 3.47.2 3.47.3 3.47.5 3.47.6 3.47.7 3.47.9 3.48.0 3.48.1 3.49.0 3.49.1 3.5.0 3.5.1 3.50.0 3.51.0 3.51.1 3.51.2 3.52.0 3.53.0 3.54.0 3.54.1 3.54.2 3.54.3 3.55.0 3.55.1 3.56.0 3.56.1 3.56.2 3.57.0 3.57.1 3.58.0 3.59.0 3.59.1 3.59.2 3.6.0 3.6.1 3.6.2 3.6.3 3.6.4 3.6.5 3.6.6 3.6.7 3.60.0 3.60.1 3.60.10 3.60.11 3.60.12 3.60.2 3.60.3 3.60.4 3.60.6 3.60.7 3.60.8 3.60.9 3.61.0 3.62.0 3.62.1 3.63.0 3.64.0 3.64.1 3.64.2 3.64.3 3.65.0 trunk 3.65.1 3.0.0 3.66.0 3.0.0-beta.1 3.67.0 3.0.0-beta.10 3.67.1 3.0.0-beta.11 3.68.0 3.0.0-beta.12 3.69.0 3.0.0-beta.13 3.69.1 3.0.0-beta.14 3.7.0
mailpoet / vendor-prefixed / symfony / translation-contracts / Test / TranslatorTest.php
mailpoet / vendor-prefixed / symfony / translation-contracts / Test Last commit date
TranslatorTest.php 1 year ago index.php 3 years ago
TranslatorTest.php
234 lines
1 <?php
2 namespace MailPoetVendor\Symfony\Contracts\Translation\Test;
3 if (!defined('ABSPATH')) exit;
4 use MailPoetVendor\PHPUnit\Framework\TestCase;
5 use MailPoetVendor\Symfony\Contracts\Translation\TranslatorInterface;
6 use MailPoetVendor\Symfony\Contracts\Translation\TranslatorTrait;
7 class TranslatorTest extends TestCase
8 {
9 private $defaultLocale;
10 protected function setUp() : void
11 {
12 $this->defaultLocale = \Locale::getDefault();
13 \Locale::setDefault('en');
14 }
15 protected function tearDown() : void
16 {
17 \Locale::setDefault($this->defaultLocale);
18 }
19 public function getTranslator()
20 {
21 return new class implements TranslatorInterface
22 {
23 use TranslatorTrait;
24 };
25 }
26 public function testTrans($expected, $id, $parameters)
27 {
28 $translator = $this->getTranslator();
29 $this->assertEquals($expected, $translator->trans($id, $parameters));
30 }
31 public function testTransChoiceWithExplicitLocale($expected, $id, $number)
32 {
33 $translator = $this->getTranslator();
34 $this->assertEquals($expected, $translator->trans($id, ['%count%' => $number]));
35 }
36 public function testTransChoiceWithDefaultLocale($expected, $id, $number)
37 {
38 $translator = $this->getTranslator();
39 $this->assertEquals($expected, $translator->trans($id, ['%count%' => $number]));
40 }
41 public function testTransChoiceWithEnUsPosix($expected, $id, $number)
42 {
43 $translator = $this->getTranslator();
44 $translator->setLocale('en_US_POSIX');
45 $this->assertEquals($expected, $translator->trans($id, ['%count%' => $number]));
46 }
47 public function testGetSetLocale()
48 {
49 $translator = $this->getTranslator();
50 $this->assertEquals('en', $translator->getLocale());
51 }
52 public function testGetLocaleReturnsDefaultLocaleIfNotSet()
53 {
54 $translator = $this->getTranslator();
55 \Locale::setDefault('pt_BR');
56 $this->assertEquals('pt_BR', $translator->getLocale());
57 \Locale::setDefault('en');
58 $this->assertEquals('en', $translator->getLocale());
59 }
60 public static function getTransTests()
61 {
62 return [['Symfony is great!', 'Symfony is great!', []], ['Symfony is awesome!', 'Symfony is %what%!', ['%what%' => 'awesome']]];
63 }
64 public static function getTransChoiceTests()
65 {
66 return [
67 ['There are no apples', '{0} There are no apples|{1} There is one apple|]1,Inf] There are %count% apples', 0],
68 ['There is one apple', '{0} There are no apples|{1} There is one apple|]1,Inf] There are %count% apples', 1],
69 ['There are 10 apples', '{0} There are no apples|{1} There is one apple|]1,Inf] There are %count% apples', 10],
70 ['There are 0 apples', 'There is 1 apple|There are %count% apples', 0],
71 ['There is 1 apple', 'There is 1 apple|There are %count% apples', 1],
72 ['There are 10 apples', 'There is 1 apple|There are %count% apples', 10],
73 // custom validation messages may be coded with a fixed value
74 ['There are 2 apples', 'There are 2 apples', 2],
75 ];
76 }
77 public function testInterval($expected, $number, $interval)
78 {
79 $translator = $this->getTranslator();
80 $this->assertEquals($expected, $translator->trans($interval . ' foo|[1,Inf[ bar', ['%count%' => $number]));
81 }
82 public static function getInterval()
83 {
84 return [['foo', 3, '{1,2, 3 ,4}'], ['bar', 10, '{1,2, 3 ,4}'], ['bar', 3, '[1,2]'], ['foo', 1, '[1,2]'], ['foo', 2, '[1,2]'], ['bar', 1, ']1,2['], ['bar', 2, ']1,2['], ['foo', \log(0), '[-Inf,2['], ['foo', -\log(0), '[-2,+Inf]']];
85 }
86 public function testChoose($expected, $id, $number, $locale = null)
87 {
88 $translator = $this->getTranslator();
89 $this->assertEquals($expected, $translator->trans($id, ['%count%' => $number], null, $locale));
90 }
91 public function testReturnMessageIfExactlyOneStandardRuleIsGiven()
92 {
93 $translator = $this->getTranslator();
94 $this->assertEquals('There are two apples', $translator->trans('There are two apples', ['%count%' => 2]));
95 }
96 public function testThrowExceptionIfMatchingMessageCannotBeFound($id, $number)
97 {
98 $this->expectException(\InvalidArgumentException::class);
99 $translator = $this->getTranslator();
100 $translator->trans($id, ['%count%' => $number]);
101 }
102 public static function getNonMatchingMessages()
103 {
104 return [['{0} There are no apples|{1} There is one apple', 2], ['{1} There is one apple|]1,Inf] There are %count% apples', 0], ['{1} There is one apple|]2,Inf] There are %count% apples', 2], ['{0} There are no apples|There is one apple', 2]];
105 }
106 public static function getChooseTests()
107 {
108 return [
109 ['There are no apples', '{0} There are no apples|{1} There is one apple|]1,Inf] There are %count% apples', 0],
110 ['There are no apples', '{0} There are no apples|{1} There is one apple|]1,Inf] There are %count% apples', 0],
111 ['There are no apples', '{0}There are no apples|{1} There is one apple|]1,Inf] There are %count% apples', 0],
112 ['There is one apple', '{0} There are no apples|{1} There is one apple|]1,Inf] There are %count% apples', 1],
113 ['There are 10 apples', '{0} There are no apples|{1} There is one apple|]1,Inf] There are %count% apples', 10],
114 ['There are 10 apples', '{0} There are no apples|{1} There is one apple|]1,Inf]There are %count% apples', 10],
115 ['There are 10 apples', '{0} There are no apples|{1} There is one apple|]1,Inf] There are %count% apples', 10],
116 ['There are 0 apples', 'There is one apple|There are %count% apples', 0],
117 ['There is one apple', 'There is one apple|There are %count% apples', 1],
118 ['There are 10 apples', 'There is one apple|There are %count% apples', 10],
119 ['There are 0 apples', 'one: There is one apple|more: There are %count% apples', 0],
120 ['There is one apple', 'one: There is one apple|more: There are %count% apples', 1],
121 ['There are 10 apples', 'one: There is one apple|more: There are %count% apples', 10],
122 ['There are no apples', '{0} There are no apples|one: There is one apple|more: There are %count% apples', 0],
123 ['There is one apple', '{0} There are no apples|one: There is one apple|more: There are %count% apples', 1],
124 ['There are 10 apples', '{0} There are no apples|one: There is one apple|more: There are %count% apples', 10],
125 ['', '{0}|{1} There is one apple|]1,Inf] There are %count% apples', 0],
126 ['', '{0} There are no apples|{1}|]1,Inf] There are %count% apples', 1],
127 // Indexed only tests which are Gettext PoFile* compatible strings.
128 ['There are 0 apples', 'There is one apple|There are %count% apples', 0],
129 ['There is one apple', 'There is one apple|There are %count% apples', 1],
130 ['There are 2 apples', 'There is one apple|There are %count% apples', 2],
131 // Tests for float numbers
132 ['There is almost one apple', '{0} There are no apples|]0,1[ There is almost one apple|{1} There is one apple|[1,Inf] There is more than one apple', 0.7],
133 ['There is one apple', '{0} There are no apples|]0,1[There are %count% apples|{1} There is one apple|[1,Inf] There is more than one apple', 1],
134 ['There is more than one apple', '{0} There are no apples|]0,1[There are %count% apples|{1} There is one apple|[1,Inf] There is more than one apple', 1.7],
135 ['There are no apples', '{0} There are no apples|]0,1[There are %count% apples|{1} There is one apple|[1,Inf] There is more than one apple', 0],
136 ['There are no apples', '{0} There are no apples|]0,1[There are %count% apples|{1} There is one apple|[1,Inf] There is more than one apple', 0.0],
137 ['There are no apples', '{0.0} There are no apples|]0,1[There are %count% apples|{1} There is one apple|[1,Inf] There is more than one apple', 0],
138 // Test texts with new-lines
139 // with double-quotes and \n in id & double-quotes and actual newlines in text
140 ["This is a text with a\n new-line in it. Selector = 0.", '{0}This is a text with a
141 new-line in it. Selector = 0.|{1}This is a text with a
142 new-line in it. Selector = 1.|[1,Inf]This is a text with a
143 new-line in it. Selector > 1.', 0],
144 // with double-quotes and \n in id and single-quotes and actual newlines in text
145 ["This is a text with a\n new-line in it. Selector = 1.", '{0}This is a text with a
146 new-line in it. Selector = 0.|{1}This is a text with a
147 new-line in it. Selector = 1.|[1,Inf]This is a text with a
148 new-line in it. Selector > 1.', 1],
149 ["This is a text with a\n new-line in it. Selector > 1.", '{0}This is a text with a
150 new-line in it. Selector = 0.|{1}This is a text with a
151 new-line in it. Selector = 1.|[1,Inf]This is a text with a
152 new-line in it. Selector > 1.', 5],
153 // with double-quotes and id split across lines
154 ['This is a text with a
155 new-line in it. Selector = 1.', '{0}This is a text with a
156 new-line in it. Selector = 0.|{1}This is a text with a
157 new-line in it. Selector = 1.|[1,Inf]This is a text with a
158 new-line in it. Selector > 1.', 1],
159 // with single-quotes and id split across lines
160 ['This is a text with a
161 new-line in it. Selector > 1.', '{0}This is a text with a
162 new-line in it. Selector = 0.|{1}This is a text with a
163 new-line in it. Selector = 1.|[1,Inf]This is a text with a
164 new-line in it. Selector > 1.', 5],
165 // with single-quotes and \n in text
166 ['This is a text with a\\nnew-line in it. Selector = 0.', '{0}This is a text with a\\nnew-line in it. Selector = 0.|{1}This is a text with a\\nnew-line in it. Selector = 1.|[1,Inf]This is a text with a\\nnew-line in it. Selector > 1.', 0],
167 // with double-quotes and id split across lines
168 ["This is a text with a\nnew-line in it. Selector = 1.", "{0}This is a text with a\nnew-line in it. Selector = 0.|{1}This is a text with a\nnew-line in it. Selector = 1.|[1,Inf]This is a text with a\nnew-line in it. Selector > 1.", 1],
169 // escape pipe
170 ['This is a text with | in it. Selector = 0.', '{0}This is a text with || in it. Selector = 0.|{1}This is a text with || in it. Selector = 1.', 0],
171 // Empty plural set (2 plural forms) from a .PO file
172 ['', '|', 1],
173 // Empty plural set (3 plural forms) from a .PO file
174 ['', '||', 1],
175 // Floating values
176 ['1.5 liters', '%count% liter|%count% liters', 1.5],
177 ['1.5 litre', '%count% litre|%count% litres', 1.5, 'fr'],
178 // Negative values
179 ['-1 degree', '%count% degree|%count% degrees', -1],
180 ['-1 degré', '%count% degré|%count% degrés', -1],
181 ['-1.5 degrees', '%count% degree|%count% degrees', -1.5],
182 ['-1.5 degré', '%count% degré|%count% degrés', -1.5, 'fr'],
183 ['-2 degrees', '%count% degree|%count% degrees', -2],
184 ['-2 degrés', '%count% degré|%count% degrés', -2],
185 ];
186 }
187 public function testFailedLangcodes($nplural, $langCodes)
188 {
189 $matrix = $this->generateTestData($langCodes);
190 $this->validateMatrix($nplural, $matrix, \false);
191 }
192 public function testLangcodes($nplural, $langCodes)
193 {
194 $matrix = $this->generateTestData($langCodes);
195 $this->validateMatrix($nplural, $matrix);
196 }
197 public static function successLangcodes()
198 {
199 return [['1', ['ay', 'bo', 'cgg', 'dz', 'id', 'ja', 'jbo', 'ka', 'kk', 'km', 'ko', 'ky']], ['2', ['nl', 'fr', 'en', 'de', 'de_GE', 'hy', 'hy_AM', 'en_US_POSIX']], ['3', ['be', 'bs', 'cs', 'hr']], ['4', ['cy', 'mt', 'sl']], ['6', ['ar']]];
200 }
201 public static function failingLangcodes()
202 {
203 return [['1', ['fa']], ['2', ['jbo']], ['3', ['cbs']], ['4', ['gd', 'kw']], ['5', ['ga']]];
204 }
205 protected function validateMatrix($nplural, $matrix, $expectSuccess = \true)
206 {
207 foreach ($matrix as $langCode => $data) {
208 $indexes = \array_flip($data);
209 if ($expectSuccess) {
210 $this->assertCount($nplural, $indexes, "Langcode '{$langCode}' has '{$nplural}' plural forms.");
211 } else {
212 $this->assertNotEquals((int) $nplural, \count($indexes), "Langcode '{$langCode}' has '{$nplural}' plural forms.");
213 }
214 }
215 }
216 protected function generateTestData($langCodes)
217 {
218 $translator = new class
219 {
220 use TranslatorTrait {
221 getPluralizationRule as public;
222 }
223 };
224 $matrix = [];
225 foreach ($langCodes as $langCode) {
226 for ($count = 0; $count < 200; ++$count) {
227 $plural = $translator->getPluralizationRule($count, $langCode);
228 $matrix[$langCode][$count] = $plural;
229 }
230 }
231 return $matrix;
232 }
233 }
234