getMock('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; } }