PageRenderTime 69ms CodeModel.GetById 18ms RepoModel.GetById 2ms app.codeStats 0ms

/tests/pomo/mo.php

https://gitlab.com/Blueprint-Marketing/wordpress-unit-tests
PHP | 143 lines | 115 code | 25 blank | 3 comment | 2 complexity | b6bc5d8b6f38533343bc5427f4cfcd6c MD5 | raw file
  1. <?php
  2. class Tests_POMO_MO extends WP_UnitTestCase {
  3. function test_mo_simple() {
  4. $mo = new MO();
  5. $mo->import_from_file(DIR_TESTDATA . '/pomo/simple.mo');
  6. $this->assertEquals(array('Project-Id-Version' => 'WordPress 2.6-bleeding', 'Report-Msgid-Bugs-To' => 'wp-polyglots@lists.automattic.com'), $mo->headers);
  7. $this->assertEquals(2, count($mo->entries));
  8. $this->assertEquals(array('dyado'), $mo->entries['baba']->translations);
  9. $this->assertEquals(array('yes'), $mo->entries["kuku\nruku"]->translations);
  10. }
  11. function test_mo_plural() {
  12. $mo = new MO();
  13. $mo->import_from_file(DIR_TESTDATA . '/pomo/plural.mo');
  14. $this->assertEquals(1, count($mo->entries));
  15. $this->assertEquals(array("oney dragoney", "twoey dragoney", "manyey dragoney", "manyeyey dragoney", "manyeyeyey dragoney"), $mo->entries["one dragon"]->translations);
  16. $this->assertEquals('oney dragoney', $mo->translate_plural('one dragon', '%d dragons', 1));
  17. $this->assertEquals('twoey dragoney', $mo->translate_plural('one dragon', '%d dragons', 2));
  18. $this->assertEquals('twoey dragoney', $mo->translate_plural('one dragon', '%d dragons', -8));
  19. $mo->set_header('Plural-Forms', 'nplurals=5; plural=0');
  20. $this->assertEquals('oney dragoney', $mo->translate_plural('one dragon', '%d dragons', 1));
  21. $this->assertEquals('oney dragoney', $mo->translate_plural('one dragon', '%d dragons', 2));
  22. $this->assertEquals('oney dragoney', $mo->translate_plural('one dragon', '%d dragons', -8));
  23. $mo->set_header('Plural-Forms', 'nplurals=5; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;');
  24. $this->assertEquals('oney dragoney', $mo->translate_plural('one dragon', '%d dragons', 1));
  25. $this->assertEquals('manyey dragoney', $mo->translate_plural('one dragon', '%d dragons', 11));
  26. $this->assertEquals('twoey dragoney', $mo->translate_plural('one dragon', '%d dragons', 3));
  27. $mo->set_header('Plural-Forms', 'nplurals=2; plural=n !=1;');
  28. $this->assertEquals('oney dragoney', $mo->translate_plural('one dragon', '%d dragons', 1));
  29. $this->assertEquals('twoey dragoney', $mo->translate_plural('one dragon', '%d dragons', 2));
  30. $this->assertEquals('twoey dragoney', $mo->translate_plural('one dragon', '%d dragons', -8));
  31. }
  32. function test_mo_context() {
  33. $mo = new MO();
  34. $mo->import_from_file(DIR_TESTDATA . '/pomo/context.mo');
  35. $this->assertEquals(2, count($mo->entries));
  36. $plural_entry = new Translation_Entry(array('singular' => 'one dragon', 'plural' => '%d dragons', 'translations' => array("oney dragoney", "twoey dragoney","manyey dragoney"), 'context' => 'dragonland'));
  37. $this->assertEquals($plural_entry, $mo->entries[$plural_entry->key()]);
  38. $this->assertEquals("dragonland", $mo->entries[$plural_entry->key()]->context);
  39. $single_entry = new Translation_Entry(array('singular' => 'one dragon', 'translations' => array("oney dragoney"), 'context' => 'not so dragon'));
  40. $this->assertEquals($single_entry, $mo->entries[$single_entry->key()]);
  41. $this->assertEquals("not so dragon", $mo->entries[$single_entry->key()]->context);
  42. }
  43. function test_translations_merge() {
  44. $host = new Translations();
  45. $host->add_entry(new Translation_Entry(array('singular' => 'pink',)));
  46. $host->add_entry(new Translation_Entry(array('singular' => 'green',)));
  47. $guest = new Translations();
  48. $guest->add_entry(new Translation_Entry(array('singular' => 'green',)));
  49. $guest->add_entry(new Translation_Entry(array('singular' => 'red',)));
  50. $host->merge_with($guest);
  51. $this->assertEquals(3, count($host->entries));
  52. $this->assertEquals(array(), array_diff(array('pink', 'green', 'red'), array_keys($host->entries)));
  53. }
  54. function test_export_mo_file() {
  55. $entries = array();
  56. $entries[] = new Translation_Entry(array('singular' => 'pink',
  57. 'translations' => array('розов')));
  58. $no_translation_entry = new Translation_Entry(array('singular' => 'grey'));
  59. $entries[] = new Translation_Entry(array('singular' => 'green', 'plural' => 'greens',
  60. 'translations' => array('зелен', 'зелени')));
  61. $entries[] = new Translation_Entry(array('singular' => 'red', 'context' => 'color',
  62. 'translations' => array('червен')));
  63. $entries[] = new Translation_Entry(array('singular' => 'red', 'context' => 'bull',
  64. 'translations' => array('бик')));
  65. $entries[] = new Translation_Entry(array('singular' => 'maroon', 'plural' => 'maroons', 'context' => 'context',
  66. 'translations' => array('пурпурен', 'пурпурни')));
  67. $mo = new MO();
  68. $mo->set_header('Project-Id-Version', 'Baba Project 1.0');
  69. foreach($entries as $entry) {
  70. $mo->add_entry($entry);
  71. }
  72. $mo->add_entry($no_translation_entry);
  73. $temp_fn = $this->temp_filename();
  74. $mo->export_to_file($temp_fn);
  75. $again = new MO();
  76. $again->import_from_file($temp_fn);
  77. $this->assertEquals(count($entries), count($again->entries));
  78. foreach($entries as $entry) {
  79. $this->assertEquals($entry, $again->entries[$entry->key()]);
  80. }
  81. }
  82. function test_export_should_not_include_empty_translations() {
  83. $entries = array( );
  84. $mo = new MO;
  85. $mo->add_entry( array( 'singular' => 'baba', 'translations' => array( '', '' ) ) );
  86. $temp_fn = $this->temp_filename();
  87. $mo->export_to_file( $temp_fn );
  88. $again = new MO();
  89. $again->import_from_file($temp_fn);
  90. $this->assertEquals( 0, count( $again->entries ) );
  91. }
  92. function test_nplurals_with_backslashn() {
  93. $mo = new MO();
  94. $mo->import_from_file(DIR_TESTDATA . '/pomo/bad_nplurals.mo');
  95. $this->assertEquals('%d foro', $mo->translate_plural('%d forum', '%d forums', 1));
  96. $this->assertEquals('%d foros', $mo->translate_plural('%d forum', '%d forums', 2));
  97. $this->assertEquals('%d foros', $mo->translate_plural('%d forum', '%d forums', -1));
  98. }
  99. function disabled_test_performance() {
  100. $start = microtime(true);
  101. $mo = new MO();
  102. $mo->import_from_file(DIR_TESTDATA . '/pomo/de_DE-2.8.mo');
  103. // echo "\nPerformance: ".(microtime(true) - $start)."\n";
  104. }
  105. function test_overloaded_mb_functions() {
  106. // skipIf() method skips the whole test case, not only this method
  107. // that's why we are skipping it the stupid way
  108. if ((ini_get("mbstring.func_overload") & 2) != 0) {
  109. $mo = new MO();
  110. $mo->import_from_file(DIR_TESTDATA . '/pomo/overload.mo');
  111. $this->assertEquals(array('Табло'), $mo->entries['Dashboard']->translations);
  112. }
  113. }
  114. function test_load_pot_file() {
  115. $mo = new MO();
  116. $this->assertEquals( false, $mo->import_from_file(DIR_TESTDATA . '/pomo/mo.pot') );
  117. }
  118. }