summaryrefslogtreecommitdiff
path: root/tests/unit/I18N/core/ChoiceFormatTest.php
diff options
context:
space:
mode:
Diffstat (limited to 'tests/unit/I18N/core/ChoiceFormatTest.php')
-rw-r--r--tests/unit/I18N/core/ChoiceFormatTest.php101
1 files changed, 101 insertions, 0 deletions
diff --git a/tests/unit/I18N/core/ChoiceFormatTest.php b/tests/unit/I18N/core/ChoiceFormatTest.php
new file mode 100644
index 00000000..ef397e05
--- /dev/null
+++ b/tests/unit/I18N/core/ChoiceFormatTest.php
@@ -0,0 +1,101 @@
+<?php
+
+Prado::using('System.I18N.core.ChoiceFormat');
+
+/**
+ * @package System.I18N.core
+ */
+class ChoiceFormatTest extends PHPUnit_Framework_TestCase
+{
+ function testChoices()
+ {
+ $choice = new ChoiceFormat();
+ $string = '[0] are no files |[1] is one file |(1,Inf] are {number} files';
+
+ $want = 'are no files';
+ $this->assertEquals($want, $choice->format($string, 0));
+
+ $want = 'is one file';
+ $this->assertEquals($want, $choice->format($string, 1));
+
+ $want = 'are {number} files';
+ $this->assertEquals($want, $choice->format($string, 5));
+
+ $this->assertFalse($choice->format($string, -1));
+
+ $string = '{1,2} one two |{3,4} three four |[2,5] two to five inclusive';
+ $this->assertEquals($choice->format($string,1),'one two');
+ $this->assertEquals($choice->format($string,2.1),'two to five inclusive');
+ $this->assertEquals($choice->format($string,3),'three four');
+ }
+
+ function test_set_notation()
+ {
+ $choice = new ChoiceFormat();
+ $string = '{n: n%2 == 0} are even numbers |{n: n >= 5} are not even and greater than or equal to 5';
+
+ $want = 'are even numbers';
+ $this->assertEquals($want, $choice->format($string, 0));
+ $this->assertEquals($want, $choice->format($string, 2));
+ $this->assertEquals($want, $choice->format($string, 4));
+ $this->assertNotEquals($want, $choice->format($string, 1));
+
+ $want = 'are not even and greater than or equal to 5';
+ $this->assertEquals($want, $choice->format($string, 5));
+ }
+
+ function test_polish()
+ {
+ $choice = new ChoiceFormat();
+ $string = '[1] plik |{2,3,4} pliki
+ |[5,21] pliko\'w |{n: n % 10 > 1 && n %10 < 5} pliki |{n: n%10 >= 5 || n%10 <=1} pliko\'w';
+
+ $wants = array( 'plik' => array(1),
+ 'pliki' => array(2,3,4,22,23,24),
+ 'pliko\'w' => array(5,6,7,11,12,15,17,20,21,25,26,30));
+ foreach($wants as $want => $numbers)
+ {
+ foreach($numbers as $n)
+ $this->assertEquals($want, $choice->format($string, $n));
+ }
+ }
+
+ function test_russian()
+ {
+ $choice = new ChoiceFormat();
+ $string = '
+ {n: n % 10 == 1 && n % 100 != 11} test1
+ |{n: n % 10 >= 2 && n % 10 <= 4 && ( n % 100 < 10 || n % 100 >= 20 )} test2
+ |{n: 2} test3';
+
+ $wants = array('test1' => array(1,21,31,41),
+ 'test2' => array(2,4, 22, 24, 32, 34),
+ 'test3' => array(0, 5,6,7,8,9,10,11,12,13,14, 20,25,26,30)
+ );
+ foreach($wants as $want => $numbers)
+ {
+ foreach($numbers as $n)
+ $this->assertEquals($want, $choice->format($string, $n));
+ }
+ }
+
+ function test_english()
+ {
+ $choice = new ChoiceFormat();
+ $string = '[0] none |{n: n % 10 == 1} 1st |{n: n % 10 == 2} 2nd |{n: n % 10 == 3} 3rd |{n:n} th';
+
+ $wants = array('none' => array(0),
+ '1st' => array(1,11,21),
+ '2nd' => array(2,12,22),
+ '3rd' => array(3,13,23),
+ 'th' => array(4,5,6,7,14,15)
+ );
+ foreach($wants as $want => $numbers)
+ {
+ foreach($numbers as $n)
+ $this->assertEquals($want, $choice->format($string, $n));
+ }
+ }
+}
+
+?> \ No newline at end of file