From 847d5bbc3aaad2c2321bc8ececa1a65c937aa65c Mon Sep 17 00:00:00 2001 From: ndm2 Date: Fri, 25 May 2018 12:50:12 +0200 Subject: [PATCH] Keep the transliterator identifier getter/setter. --- src/Utility/Text.php | 101 ++++++---------- tests/TestCase/Utility/TextTest.php | 179 +++++++--------------------- 2 files changed, 80 insertions(+), 200 deletions(-) diff --git a/src/Utility/Text.php b/src/Utility/Text.php index debe8942a2c..a5873d384f6 100644 --- a/src/Utility/Text.php +++ b/src/Utility/Text.php @@ -23,20 +23,18 @@ class Text { /** - * Default transliterator id string. + * Default transliterator. * - * @deprecated 3.7.0 Use $_defaultTransliterator instead. - * @var string $_defaultTransliteratorId Transliterator identifier string. + * @var \Transliterator Transliterator instance. */ - protected static $_defaultTransliteratorId; + protected static $_defaultTransliterator; /** - * Default transliterator. + * Default transliterator id string. * - * @var \Transliterator|string Either a Transliterator instance, or a - * transliterator identifier string. + * @var string $_defaultTransliteratorId Transliterator identifier string. */ - protected static $_defaultTransliterator = 'Any-Latin; Latin-ASCII; [\u0080-\u7fff] remove'; + protected static $_defaultTransliteratorId = 'Any-Latin; Latin-ASCII; [\u0080-\u7fff] remove'; /** * Default html tags who must not be count for truncate text. @@ -1061,61 +1059,49 @@ public static function parseFileSize($size, $default = false) } /** - * Get default transliterator identifier string. + * Get the default transliterator. * - * @deprecated 3.7.0 Use getTransliterator() instead. - * @return string Transliterator identifier. + * @return \Transliterator|null Either a Transliterator instance, or `null` + * in case no transliterator has been set yet. + * @since 3.7.0 */ - public static function getTransliteratorId() + public static function getTransliterator() { - deprecationWarning( - 'Text::getTransliteratorId() is deprecated. ' . - 'Use Text::getTransliterator() instead.' - ); - - return static::getTransliterator(); + return static::$_defaultTransliterator; } /** - * Set default transliterator identifier string. + * Set the default transliterator. * - * @deprecated 3.7.0 Use setTransliterator() instead. - * @param string $transliteratorId Transliterator identifier. + * @param \Transliterator $transliterator A `Transliterator` instance. * @return void + * @since 3.7.0 */ - public static function setTransliteratorId($transliteratorId) + public static function setTransliterator(\Transliterator $transliterator) { - deprecationWarning( - 'Text::setTransliteratorId() is deprecated. ' . - 'Use Text::setTransliterator() instead.' - ); - - static::setTransliterator($transliteratorId); + static::$_defaultTransliterator = $transliterator; } /** - * Get the default transliterator. + * Get default transliterator identifier string. * - * @return \Transliterator|string Either a Transliterator instance, or a - * transliterator identifier string. - * @since 3.7.0 + * @return string Transliterator identifier. */ - public static function getTransliterator() + public static function getTransliteratorId() { - return static::$_defaultTransliterator; + return static::$_defaultTransliteratorId; } /** * Set default transliterator identifier string. * - * @param \Transliterator|string $transliterator Either a Transliterator - * instance, or a transliterator identifier string. + * @param string $transliteratorId Transliterator identifier. * @return void - * @since 3.7.0 */ - public static function setTransliterator($transliterator) + public static function setTransliteratorId($transliteratorId) { - static::$_defaultTransliterator = $transliterator; + static::setTransliterator(transliterator_create($transliteratorId)); + static::$_defaultTransliteratorId = $transliteratorId; } /** @@ -1123,23 +1109,16 @@ public static function setTransliterator($transliterator) * * @param string $string String to transliterate. * @param \Transliterator|string|null $transliterator Either a Transliterator - * instance, or a transliterator identifier string. If `null` - * `Text::$_defaultTransliterator` will be used. + * instance, or a transliterator identifier string. If `null`, the default + * transliterator (identifier) set via `setTransliteratorId()` or + * `setTransliterator()` will be used. * @return string * @see https://secure.php.net/manual/en/transliterator.transliterate.php */ public static function transliterate($string, $transliterator = null) { if (!$transliterator) { - if (static::$_defaultTransliteratorId !== null) { - deprecationWarning( - '`Text::$_defaultTransliteratorId` is deprecated. ' . - 'Use `Text::$_defaultTransliterator` instead.' - ); - $transliterator = static::$_defaultTransliteratorId; - } else { - $transliterator = static::$_defaultTransliterator; - } + $transliterator = static::$_defaultTransliterator ?: static::$_defaultTransliteratorId; } return transliterator_transliterate($transliterator, $string); @@ -1152,11 +1131,10 @@ public static function transliterate($string, $transliterator = null) * ### Options: * * - `replacement`: Replacement string. Default '-'. - * - `transliterator`: A Transliterator instance, or a transliterator id string. - * If `null` (default) `Text::$_defaultTransliterator` will be used. + * - `transliteratorId`: A valid transliterator id string. + * If `null` (default) the transliterator (identifier) set via + * `setTransliteratorId()` or `setTransliterator()` will be used. * If `false` no transliteration will be done, only non words will be removed. - * - `transliteratorId`: Deprecated as of 3.7.0, use the `transliterator` option - * instead. * - `preserve`: Specific non-word character to preserve. Default `null`. * For e.g. this option can be set to '.' to generate clean file names. * @@ -1164,6 +1142,8 @@ public static function transliterate($string, $transliterator = null) * @param array $options If string it will be use as replacement character * or an array of options. * @return string + * @see setTransliterator() + * @see setTransliteratorId() */ public static function slug($string, $options = []) { @@ -1172,19 +1152,12 @@ public static function slug($string, $options = []) } $options += [ 'replacement' => '-', - 'transliterator' => null, + 'transliteratorId' => null, 'preserve' => null ]; - if (array_key_exists('transliteratorId', $options)) { - deprecationWarning( - 'The `transliteratorId` option is deprecated. ' . - 'Use `transliterator` instead.' - ); - $options['transliterator'] = $options['transliteratorId']; - } - if ($options['transliterator'] !== false) { - $string = static::transliterate($string, $options['transliterator']); + if ($options['transliteratorId'] !== false) { + $string = static::transliterate($string, $options['transliteratorId']); } $regex = '^\s\p{Ll}\p{Lm}\p{Lo}\p{Lt}\p{Lu}\p{Nd}'; diff --git a/tests/TestCase/Utility/TextTest.php b/tests/TestCase/Utility/TextTest.php index 02cd8290068..1b773bf9946 100644 --- a/tests/TestCase/Utility/TextTest.php +++ b/tests/TestCase/Utility/TextTest.php @@ -17,14 +17,6 @@ use Cake\TestSuite\TestCase; use Cake\Utility\Text; -/** - * Helper class that assists with testing overloading of a deprecated property. - */ -class TextOverloadDeprecatedTransliteratorIdProperty extends Text -{ - protected static $_defaultTransliteratorId = 'Any-Latin; Latin-ASCII; [\u0080-\u7fff] remove'; -} - /** * TextTest class */ @@ -1688,25 +1680,6 @@ public function filesizes() ]; } - /** - * Test getting/setting default transliterator id. - * - * @return void - */ - public function testDeprecatedGetSetTransliteratorId() - { - $this->deprecated(function () { - $defaultTransliteratorId = 'Any-Latin; Latin-ASCII; [\u0080-\u7fff] remove'; - $this->assertEquals($defaultTransliteratorId, Text::getTransliteratorId()); - - $expected = 'Latin-ASCII; [\u0080-\u7fff] remove'; - Text::setTransliteratorId($expected); - $this->assertEquals($expected, Text::getTransliteratorId()); - - Text::setTransliteratorId($defaultTransliteratorId); - }); - } - /** * Test getting/setting default transliterator. * @@ -1714,12 +1687,7 @@ public function testDeprecatedGetSetTransliteratorId() */ public function testGetSetTransliterator() { - $defaultTransliterator = 'Any-Latin; Latin-ASCII; [\u0080-\u7fff] remove'; - $this->assertEquals($defaultTransliterator, Text::getTransliterator()); - - $expected = 'Latin-ASCII; [\u0080-\u7fff] remove'; - Text::setTransliterator($expected); - $this->assertEquals($expected, Text::getTransliterator()); + $this->assertNull(Text::getTransliterator()); $transliterator = \Transliterator::createFromRules(' $nonletter = [:^Letter:]; @@ -1729,8 +1697,26 @@ public function testGetSetTransliterator() $this->assertInstanceOf(\Transliterator::class, $transliterator); Text::setTransliterator($transliterator); $this->assertSame($transliterator, Text::getTransliterator()); + } + + /** + * Test getting/setting default transliterator id. + * + * @return void + */ + public function testGetSetTransliteratorId() + { + $defaultTransliteratorId = 'Any-Latin; Latin-ASCII; [\u0080-\u7fff] remove'; + $this->assertEquals($defaultTransliteratorId, Text::getTransliteratorId()); + + $expected = 'Latin-ASCII;[\u0080-\u7fff] remove'; + Text::setTransliteratorId($expected); + $this->assertEquals($expected, Text::getTransliteratorId()); - Text::setTransliterator($defaultTransliterator); + $this->assertInstanceOf(\Transliterator::class, Text::getTransliterator()); + $this->assertEquals($expected, Text::getTransliterator()->id); + + Text::setTransliteratorId($defaultTransliteratorId); } /** @@ -1750,8 +1736,23 @@ public function transliterateInputProvider() 'A ae Ubermensch pa hoyeste niva! I a lublu PHP! est. fi ' ], [ - 'Äpfel Über Öl grün ärgert groß öko', null, - 'Apfel Uber Ol grun argert gross oko' + 'Äpfel Über Öl grün ärgert groß öko', + transliterator_create_from_rules(' + $AE = [Ä {A \u0308}]; + $OE = [Ö {O \u0308}]; + $UE = [Ü {U \u0308}]; + [ä {a \u0308}] → ae; + [ö {o \u0308}] → oe; + [ü {u \u0308}] → ue; + {$AE} [:Lowercase:] → Ae; + {$OE} [:Lowercase:] → Oe; + {$UE} [:Lowercase:] → Ue; + $AE → AE; + $OE → OE; + $UE → UE; + ::Latin-ASCII; + '), + 'Aepfel Ueber Oel gruen aergert gross oeko' ], [ 'La langue française est un attribut de souveraineté en France', null, @@ -1795,24 +1796,6 @@ public function testTransliterate($string, $transliterator, $expected) $this->assertEquals($expected, $result); } - /** - * testTransliterateOverloadDeprecatedTransliteratorIdProperty method - * - * Tests that extending classes that overload the deprecated `$_defaultTransliteratorId` - * property still work as expected, and trigger a deprecation notice. - * - * @return void - */ - public function testTransliterateOverloadDeprecatedTransliteratorIdProperty() - { - $this->deprecated(function () { - $this->assertEquals( - 'ringo', - TextOverloadDeprecatedTransliteratorIdProperty::transliterate('りんご') - ); - }); - } - public function slugInputProvider() { return [ @@ -1833,29 +1816,12 @@ public function slugInputProvider() 'A-ae-Ubermensch-pa-hoyeste-niva-I-a-lublu-PHP-est-fi' ], [ - 'A æ Übérmensch på høyeste nivå! И я люблю PHP! есть. fi ¦', ['transliterator' => 'Latin-ASCII'], + 'A æ Übérmensch på høyeste nivå! И я люблю PHP! есть. fi ¦', ['transliteratorId' => 'Latin-ASCII'], 'A-ae-Ubermensch-pa-hoyeste-niva-И-я-люблю-PHP-есть-fi' ], [ - 'Äpfel Über Öl grün ärgert groß öko', - [ - 'transliterator' => \Transliterator::createFromRules(' - $AE = [Ä {A \u0308}]; - $OE = [Ö {O \u0308}]; - $UE = [Ü {U \u0308}]; - [ä {a \u0308}] → ae; - [ö {o \u0308}] → oe; - [ü {u \u0308}] → ue; - {$AE} [:Lowercase:] → Ae; - {$OE} [:Lowercase:] → Oe; - {$UE} [:Lowercase:] → Ue; - $AE → AE; - $OE → OE; - $UE → UE; - ::Latin-ASCII; - '), - ], - 'Aepfel-Ueber-Oel-gruen-aergert-gross-oeko' + 'Äpfel Über Öl grün ärgert groß öko', [], + 'Apfel-Uber-Ol-grun-argert-gross-oko' ], [ 'The truth - and- more- news', [], @@ -1882,15 +1848,15 @@ public function slugInputProvider() 'this-melts-your-face1-2-3' ], [ - 'controller/action/りんご/1', ['transliterator' => false], + 'controller/action/りんご/1', ['transliteratorId' => false], 'controller-action-りんご-1' ], [ - 'の話が出たので大丈夫かなあと', ['transliterator' => false], + 'の話が出たので大丈夫かなあと', ['transliteratorId' => false], 'の話が出たので大丈夫かなあと' ], [ - 'posts/view/한국어/page:1/sort:asc', ['transliterator' => false], + 'posts/view/한국어/page:1/sort:asc', ['transliteratorId' => false], 'posts-view-한국어-page-1-sort-asc' ], [ @@ -1931,65 +1897,6 @@ public function testSlug($string, $options, $expected) $this->assertEquals($expected, $result); } - public function slugDeprecatedTransliteratorIdOptionInputProvider() - { - return [ - [ - 'A æ Übérmensch på høyeste nivå! И я люблю PHP! есть. fi ¦', - ['transliteratorId' => 'Latin-ASCII'], - 'A-ae-Ubermensch-pa-hoyeste-niva-И-я-люблю-PHP-есть-fi' - ], - [ - 'Äpfel Über Öl grün ärgert groß öko', - [ - 'transliterator' => \Transliterator::createFromRules(' - $AE = [Ä {A \u0308}]; - $OE = [Ö {O \u0308}]; - $UE = [Ü {U \u0308}]; - [ä {a \u0308}] → ae; - [ö {o \u0308}] → oe; - [ü {u \u0308}] → ue; - {$AE} [:Lowercase:] → Ae; - {$OE} [:Lowercase:] → Oe; - {$UE} [:Lowercase:] → Ue; - $AE → AE; - $OE → OE; - $UE → UE; - ::Latin-ASCII; - '), - ], - 'Aepfel-Ueber-Oel-gruen-aergert-gross-oeko' - ], - [ - 'controller/action/りんご/1', - ['transliteratorId' => false], - 'controller-action-りんご-1' - ], - [ - 'cl#ean(me', - ['transliteratorId' => null], - 'cl-ean-me' - ] - ]; - } - - /** - * testSlugDeprecatedTransliteratorIdOption method - * - * @param string $string String - * @param array $options Options - * @param String $expected Expected string - * @return void - * @dataProvider slugDeprecatedTransliteratorIdOptionInputProvider - */ - public function testSlugDeprecatedTransliteratorIdOption($string, $options, $expected) - { - $this->deprecated(function () use ($string, $options, $expected) { - $result = Text::slug($string, $options); - $this->assertEquals($expected, $result); - }); - } - /** * Text truncateByWidth method *