forked from GNUsocial/gnu-social
		
	
		
			
	
	
		
			98 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
		
		
			
		
	
	
			98 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
|   | <?php | ||
|  | 
 | ||
|  | class ParsingTest extends PHPUnit_Framework_TestCase | ||
|  | { | ||
|  |     public function test_extract_plural_forms_header_from_po_header() | ||
|  |     { | ||
|  |         $parser = new gettext_reader(null); | ||
|  |         // It defaults to a "Western-style" plural header.
 | ||
|  |         $this->assertEquals( | ||
|  |         'nplurals=2; plural=n == 1 ? 0 : 1;', | ||
|  |         $parser->extract_plural_forms_header_from_po_header("") | ||
|  |     ); | ||
|  | 
 | ||
|  |         // Extracting it from the middle of the header works.
 | ||
|  |         $this->assertEquals( | ||
|  |         'nplurals=1; plural=0;', | ||
|  |         $parser->extract_plural_forms_header_from_po_header( | ||
|  |           "Content-type: text/html; charset=UTF-8\n" | ||
|  |         ."Plural-Forms: nplurals=1; plural=0;\n" | ||
|  |         ."Last-Translator: nobody\n" | ||
|  |       ) | ||
|  |     ); | ||
|  | 
 | ||
|  |         // It's also case-insensitive.
 | ||
|  |         $this->assertEquals( | ||
|  |         'nplurals=1; plural=0;', | ||
|  |         $parser->extract_plural_forms_header_from_po_header( | ||
|  |           "PLURAL-forms: nplurals=1; plural=0;\n" | ||
|  |       ) | ||
|  |     ); | ||
|  | 
 | ||
|  |         // It falls back to default if it's not on a separate line.
 | ||
|  |         $this->assertEquals( | ||
|  |         'nplurals=2; plural=n == 1 ? 0 : 1;', | ||
|  |         $parser->extract_plural_forms_header_from_po_header( | ||
|  |           "Content-type: text/html; charset=UTF-8" // note the missing \n here
 | ||
|  |         ."Plural-Forms: nplurals=1; plural=0;\n" | ||
|  |         ."Last-Translator: nobody\n" | ||
|  |       ) | ||
|  |     ); | ||
|  |     } | ||
|  | 
 | ||
|  |     /** | ||
|  |      * @expectedException InvalidArgumentException | ||
|  |      */ | ||
|  |     public function test_select_string_disallows_nonint_numbers() | ||
|  |     { | ||
|  |         $pofile_data = '' | ||
|  |       ."msgid \"\"\n" | ||
|  |       ."msgstr \"\"\n" | ||
|  |       ."\"Content-Type: text/plain; charset=utf-8\\n\"\n" | ||
|  |       ."\"Plural-Forms: nplurals=2; plural= n == 1 ? 0 : 1;\\n\"\n"; | ||
|  |         $mofile = tempnam(sys_get_temp_dir(), "pg"); | ||
|  |         $msgfmt = popen("msgfmt -o $mofile -", "w"); | ||
|  |         fwrite($msgfmt, $pofile_data); | ||
|  |         pclose($msgfmt); | ||
|  | 
 | ||
|  |         $modata = new CachedFileReader($mofile); | ||
|  |         unlink($mofile); | ||
|  |         $parser = new gettext_reader($modata); | ||
|  |         // It defaults to a "Western-style" plural header.
 | ||
|  |         $this->assertEquals( | ||
|  |         'nplurals=2; plural=n == 1 ? 0 : 1;', | ||
|  |         $parser->extract_plural_forms_header_from_po_header("") | ||
|  |     ); | ||
|  | 
 | ||
|  |         $new_tempfile = tempnam(sys_get_temp_dir(), "pg"); | ||
|  |         $parser->select_string( | ||
|  |         "(file_put_contents('$new_tempfile', 'boom'))" | ||
|  |     ); | ||
|  | 
 | ||
|  |         $this->assertEquals("", file_get_contents($new_tempfile)); | ||
|  |         unlink($new_tempfile); | ||
|  |     } | ||
|  | 
 | ||
|  |     /** | ||
|  |      * @dataProvider data_provider_test_npgettext | ||
|  |      */ | ||
|  |     public function test_npgettext($number, $expected) | ||
|  |     { | ||
|  |         $parser = new gettext_reader(null); | ||
|  |         $result = $parser->npgettext( | ||
|  |         "context", | ||
|  |         "%d pig went to the market\n", | ||
|  |         "%d pigs went to the market\n", | ||
|  |         $number | ||
|  |     ); | ||
|  |         $this->assertSame($expected, $result); | ||
|  |     } | ||
|  |     public static function data_provider_test_npgettext() | ||
|  |     { | ||
|  |         return array( | ||
|  |                  array(1, "%d pig went to the market\n"), | ||
|  |                  array(2, "%d pigs went to the market\n"), | ||
|  |                  ); | ||
|  |     } | ||
|  | } |