12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- <?php
- namespace Drupal\Tests\Core\Transliteration;
- use Drupal\Component\Utility\Random;
- use Drupal\Core\Transliteration\PhpTransliteration;
- use Drupal\Tests\UnitTestCase;
- /**
- * Tests Transliteration component functionality.
- *
- * @group Transliteration
- *
- * @coversClass \Drupal\Core\Transliteration\PhpTransliteration
- */
- class PhpTransliterationTest extends UnitTestCase {
- /**
- * Tests the PhpTransliteration with an alter hook.
- *
- * @param string $langcode
- * The langcode of the string.
- * @param string $original
- * The string which was not transliterated yet.
- * @param string $expected
- * The string expected after the transliteration.
- * @param string|null $printable
- * (optional) An alternative version of the original string which is
- * printable in the output.
- *
- * @dataProvider providerTestPhpTransliterationWithAlter
- */
- public function testPhpTransliterationWithAlter($langcode, $original, $expected, $printable = NULL) {
- if ($printable === NULL) {
- $printable = $original;
- }
- // Test each case both with a new instance of the transliteration class,
- // and with one that builds as it goes.
- $module_handler = $this->createMock('Drupal\Core\Extension\ModuleHandlerInterface');
- $module_handler->expects($this->any())
- ->method('alter')
- ->will($this->returnCallback(function ($hook, &$overrides, $langcode) {
- if ($langcode == 'zz') {
- // The default transliteration of Ä is A, but change it to Z for testing.
- $overrides[0xC4] = 'Z';
- // Also provide transliterations of two 5-byte characters from
- // http://wikipedia.org/wiki/Gothic_alphabet.
- $overrides[0x10330] = 'A';
- $overrides[0x10338] = 'Th';
- }
- }));
- $transliteration = new PhpTransliteration(NULL, $module_handler);
- $actual = $transliteration->transliterate($original, $langcode);
- $this->assertSame($expected, $actual, "'$printable' transliteration to '$actual' is identical to '$expected' for language '$langcode' in service instance.");
- }
- /**
- * Provides test data for testPhpTransliterationWithAlter.
- *
- * @return array
- */
- public function providerTestPhpTransliterationWithAlter() {
- $random_generator = new Random();
- $random = $random_generator->string(10);
- // Make some strings with two, three, and four-byte characters for testing.
- // Note that the 3-byte character is overridden by the 'kg' language.
- $two_byte = 'Ä Ö Ü Å Ø äöüåøhello';
- // These are two Gothic alphabet letters. See
- // http://wikipedia.org/wiki/Gothic_alphabet
- // They are not in our tables, but should at least give us '?' (unknown).
- $five_byte = html_entity_decode('𐌰𐌸', ENT_NOQUOTES, 'UTF-8');
- // Five-byte characters do not work in MySQL, so make a printable version.
- $five_byte_printable = '𐌰𐌸';
- $cases = [
- // Test the language override hook in the test module, which changes
- // the transliteration of Ä to Z and provides for the 5-byte characters.
- ['zz', $two_byte, 'Z O U A O aouaohello'],
- ['zz', $random, $random],
- ['zz', $five_byte, 'ATh', $five_byte_printable],
- ];
- return $cases;
- }
- }
|