diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml
index 8280ea0..f4ad547 100644
--- a/.github/workflows/ci.yaml
+++ b/.github/workflows/ci.yaml
@@ -25,6 +25,14 @@ jobs:
- name: 'Checkout Code'
uses: actions/checkout@v2
+ - name: 'Setup PHP'
+ uses: shivammathur/setup-php@v2
+ with:
+ php-version: 8.1
+ ini-values: memory_limit=-1
+ coverage: none
+ tools: composer:v2
+
- name: 'Install Dependencies'
run: composer install --prefer-dist --no-progress --no-interaction
@@ -41,7 +49,7 @@ jobs:
- name: 'Setup PHP'
uses: shivammathur/setup-php@v2
with:
- php-version: 8.0
+ php-version: 8.1
ini-values: memory_limit=-1
coverage: none
tools: composer:v2
@@ -66,7 +74,7 @@ jobs:
- name: 'Setup PHP'
uses: shivammathur/setup-php@v2
with:
- php-version: 8.0
+ php-version: 8.1
ini-values: memory_limit=-1
coverage: none
tools: composer:v2
@@ -86,10 +94,7 @@ jobs:
fail-fast: false
matrix:
php-version:
- - '7.2'
- - '7.3'
- - '7.4'
- - '8.0'
+ - '8.1'
steps:
- name: 'Checkout Code'
uses: actions/checkout@v2
@@ -122,7 +127,7 @@ jobs:
- name: 'Setup PHP'
uses: shivammathur/setup-php@v2
with:
- php-version: 7.4
+ php-version: 8.1
ini-values: memory_limit=-1
coverage: pcov
tools: composer:v2
diff --git a/.styleci.yml b/.styleci.yml
index 742c956..1c5ec6e 100644
--- a/.styleci.yml
+++ b/.styleci.yml
@@ -1,17 +1,19 @@
preset: recommended
+version: 8.1
+
enabled:
- - combine_consecutive_unsets
- - linebreak_after_opening_tag
- - ordered_class_elements
- - unalign_double_arrow
+ - combine_consecutive_unsets
+ - linebreak_after_opening_tag
+ - ordered_class_elements
+ - unalign_double_arrow
disabled:
- - align_double_arrow
+ - align_double_arrow
finder:
- exclude:
- - "tests"
- - "*Test.php"
- name:
- - "*.php"
+ exclude:
+ - "tests"
+ - "*Test.php"
+ name:
+ - "*.php"
diff --git a/README.md b/README.md
index 3b0f48d..c87cb9d 100644
--- a/README.md
+++ b/README.md
@@ -13,11 +13,11 @@ PHP library for transliteration. 🇺🇦 🇬🇧 🇷🇺 🔡 🐘
## Requirements 🧐
-* PHP 7.2 *and later*
+* PHP >= 8.1
## Installation 🌱
-```composer req fresh/transliteration='~2.1'```
+```composer req fresh/transliteration='~3.0'```
## Available transliteration methods 🎁
diff --git a/composer.json b/composer.json
index 8281ade..a080ad6 100644
--- a/composer.json
+++ b/composer.json
@@ -17,16 +17,16 @@
"issues": "https://github.com/fre5h/transliteration/issues"
},
"require": {
- "php": ">=7.2"
+ "php": ">=8.1"
},
"require-dev": {
- "friendsofphp/php-cs-fixer": "^2.18",
- "phpstan/phpstan": "^0.12",
- "phpstan/phpstan-phpunit": "^0.12",
- "phpunit/phpunit": "~8.5",
- "slam/phpstan-extensions": "^5.0.2",
- "squizlabs/php_codesniffer": "~3.5",
- "thecodingmachine/phpstan-strict-rules": "^0.12"
+ "friendsofphp/php-cs-fixer": "^3.3",
+ "phpstan/phpstan": "^1.2.0",
+ "phpstan/phpstan-phpunit": "^1.0.0",
+ "phpunit/phpunit": "^9.5",
+ "slam/phpstan-extensions": "^6.0",
+ "squizlabs/php_codesniffer": "^3.6",
+ "thecodingmachine/phpstan-strict-rules": "^1.0.0"
},
"autoload": {
"psr-4": {
diff --git a/phpstan.neon b/phpstan.neon
index cf82063..af28c27 100644
--- a/phpstan.neon
+++ b/phpstan.neon
@@ -3,9 +3,10 @@ includes:
- 'vendor/phpstan/phpstan-phpunit/rules.neon'
- 'vendor/slam/phpstan-extensions/conf/slam-rules.neon'
parameters:
- level: 8
- excludes_analyse:
+ level: 9
+ excludePaths:
- '%rootDir%/../../../tests/*'
- '%rootDir%/../../../vendor/*'
fileExtensions:
- 'php'
+ checkMissingIterableValueType: false
diff --git a/phpunit.xml.dist b/phpunit.xml.dist
index c757612..b37d7a0 100644
--- a/phpunit.xml.dist
+++ b/phpunit.xml.dist
@@ -1,7 +1,7 @@
@@ -11,9 +11,9 @@
-
-
- ./src/
-
-
+
+
+ ./src/
+
+
diff --git a/src/RussianToEnglish.php b/src/RussianToEnglish.php
index 2c7593c..e878244 100644
--- a/src/RussianToEnglish.php
+++ b/src/RussianToEnglish.php
@@ -23,7 +23,7 @@
*/
class RussianToEnglish implements TransliteratorInterface
{
- /** @const string[] */
+ /** @const array */
private const RUSSIAN_TO_ENGLISH_RULES = [
'а' => 'a',
'б' => 'b',
diff --git a/src/UkrainianToEnglish.php b/src/UkrainianToEnglish.php
index 5c0001c..703e656 100644
--- a/src/UkrainianToEnglish.php
+++ b/src/UkrainianToEnglish.php
@@ -24,7 +24,7 @@
*/
class UkrainianToEnglish implements TransliteratorInterface
{
- /** @const string[] */
+ /** @const array */
private const UKRAINIAN_TO_ENGLISH_RULES = [
'А' => 'A',
'Б' => 'B',
diff --git a/tests/RussianToEnglishTest.php b/tests/RussianToEnglishTest.php
index 5d7c6fd..733ed4b 100644
--- a/tests/RussianToEnglishTest.php
+++ b/tests/RussianToEnglishTest.php
@@ -24,8 +24,7 @@
*/
class RussianToEnglishTest extends TestCase
{
- /** @var Transliterator */
- protected $transliterator;
+ protected Transliterator $transliterator;
protected function setUp(): void
{
@@ -40,74 +39,72 @@ public function testTransliterationFromRussianToEnglish(string $russianText, str
self::assertEquals($transliteratedText, $this->transliterator->ruToEn($russianText));
}
- public function alphabetProvider(): array
+ public function alphabetProvider(): iterable
{
- return [
- ['а', 'a'],
- ['б', 'b'],
- ['в', 'v'],
- ['г', 'g'],
- ['д', 'd'],
- ['е', 'e'],
- ['ё', 'e'],
- ['ж', 'zh'],
- ['з', 'z'],
- ['и', 'i'],
- ['й', 'y'],
- ['к', 'k'],
- ['л', 'l'],
- ['м', 'm'],
- ['н', 'n'],
- ['о', 'o'],
- ['п', 'p'],
- ['р', 'r'],
- ['с', 's'],
- ['т', 't'],
- ['у', 'u'],
- ['ф', 'f'],
- ['х', 'h'],
- ['ц', 'ts'],
- ['ч', 'ch'],
- ['ш', 'sh'],
- ['щ', 'sht'],
- ['ь', ''],
- ['ы', 'y'],
- ['ъ', ''],
- ['э', 'e'],
- ['ю', 'yu'],
- ['я', 'ya'],
- ['А', 'A'],
- ['Б', 'B'],
- ['В', 'V'],
- ['Г', 'G'],
- ['Д', 'D'],
- ['Е', 'E'],
- ['Ж', 'Zh'],
- ['З', 'Z'],
- ['И', 'I'],
- ['Й', 'Y'],
- ['К', 'K'],
- ['Л', 'L'],
- ['М', 'M'],
- ['Н', 'N'],
- ['О', 'O'],
- ['П', 'P'],
- ['Р', 'R'],
- ['С', 'S'],
- ['Т', 'T'],
- ['У', 'U'],
- ['Ф', 'F'],
- ['Х', 'H'],
- ['Ц', 'Ts'],
- ['Ч', 'Ch'],
- ['Ш', 'Sh'],
- ['Щ', 'Sht'],
- ['Ь', ''],
- ['Ы', 'Y'],
- ['Ъ', ''],
- ['Э', 'E'],
- ['Ю', 'Yu'],
- ['Я', 'Ya'],
- ];
+ yield ['А', 'A'];
+ yield ['Б', 'B'];
+ yield ['В', 'V'];
+ yield ['Г', 'G'];
+ yield ['Д', 'D'];
+ yield ['Е', 'E'];
+ yield ['Ж', 'Zh'];
+ yield ['З', 'Z'];
+ yield ['И', 'I'];
+ yield ['Й', 'Y'];
+ yield ['К', 'K'];
+ yield ['Л', 'L'];
+ yield ['М', 'M'];
+ yield ['Н', 'N'];
+ yield ['О', 'O'];
+ yield ['П', 'P'];
+ yield ['Р', 'R'];
+ yield ['С', 'S'];
+ yield ['Т', 'T'];
+ yield ['У', 'U'];
+ yield ['Ф', 'F'];
+ yield ['Х', 'H'];
+ yield ['Ц', 'Ts'];
+ yield ['Ч', 'Ch'];
+ yield ['Ш', 'Sh'];
+ yield ['Щ', 'Sht'];
+ yield ['Ь', ''];
+ yield ['Ы', 'Y'];
+ yield ['Ъ', ''];
+ yield ['Э', 'E'];
+ yield ['Ю', 'Yu'];
+ yield ['Я', 'Ya'];
+ yield ['а', 'a'];
+ yield ['б', 'b'];
+ yield ['в', 'v'];
+ yield ['г', 'g'];
+ yield ['д', 'd'];
+ yield ['е', 'e'];
+ yield ['ё', 'e'];
+ yield ['ж', 'zh'];
+ yield ['з', 'z'];
+ yield ['и', 'i'];
+ yield ['й', 'y'];
+ yield ['к', 'k'];
+ yield ['л', 'l'];
+ yield ['м', 'm'];
+ yield ['н', 'n'];
+ yield ['о', 'o'];
+ yield ['п', 'p'];
+ yield ['р', 'r'];
+ yield ['с', 's'];
+ yield ['т', 't'];
+ yield ['у', 'u'];
+ yield ['ф', 'f'];
+ yield ['х', 'h'];
+ yield ['ц', 'ts'];
+ yield ['ч', 'ch'];
+ yield ['ш', 'sh'];
+ yield ['щ', 'sht'];
+ yield ['ь', ''];
+ yield ['ы', 'y'];
+ yield ['ъ', ''];
+ yield ['э', 'e'];
+ yield ['ю', 'yu'];
+ yield ['я', 'ya'];
}
}
diff --git a/tests/UkrainianToEnglishTest.php b/tests/UkrainianToEnglishTest.php
index 0d478ed..98222cf 100644
--- a/tests/UkrainianToEnglishTest.php
+++ b/tests/UkrainianToEnglishTest.php
@@ -22,8 +22,7 @@
*/
class UkrainianToEnglishTest extends TestCase
{
- /** @var Transliterator */
- protected $transliterator;
+ protected Transliterator $transliterator;
protected function setUp(): void
{
@@ -40,199 +39,193 @@ public function testTransliterationFromUkrainianToEnglish(string $ukrainianText,
$this->assertEquals($transliteratedText, $this->transliterator->ukToEn($ukrainianText));
}
- public function alphabetProvider(): array
+ public function alphabetProvider(): iterable
{
- return [
- ['А', 'A'],
- ['Б', 'B'],
- ['В', 'V'],
- ['Г', 'H'],
- ['Ґ', 'G'],
- ['Д', 'D'],
- ['Е', 'E'],
- ['Є', 'Ye'],
- ['Ж', 'Zh'],
- ['З', 'Z'],
- ['И', 'Y'],
- ['І', 'I'],
- ['Ї', 'Yi'],
- ['Й', 'Y'],
- ['К', 'K'],
- ['Л', 'L'],
- ['М', 'M'],
- ['Н', 'N'],
- ['О', 'O'],
- ['П', 'P'],
- ['Р', 'R'],
- ['С', 'S'],
- ['Т', 'T'],
- ['У', 'U'],
- ['Ф', 'F'],
- ['Х', 'Kh'],
- ['Ц', 'Ts'],
- ['Ч', 'Ch'],
- ['Ш', 'Sh'],
- ['Щ', 'Shch'],
- ['Ю', 'Yu'],
- ['Я', 'Ya'],
- ['а', 'a'],
- ['б', 'b'],
- ['в', 'v'],
- ['г', 'h'],
- ['ґ', 'g'],
- ['д', 'd'],
- ['е', 'e'],
- ['є', 'ie'],
- ['ж', 'zh'],
- ['з', 'z'],
- ['и', 'y'],
- ['і', 'i'],
- ['ї', 'i'],
- ['й', 'i'],
- ['к', 'k'],
- ['л', 'l'],
- ['м', 'm'],
- ['н', 'n'],
- ['о', 'o'],
- ['п', 'p'],
- ['р', 'r'],
- ['с', 's'],
- ['т', 't'],
- ['у', 'u'],
- ['ф', 'f'],
- ['х', 'kh'],
- ['ц', 'ts'],
- ['ч', 'ch'],
- ['ш', 'sh'],
- ['щ', 'shch'],
- ['ь', ''],
- ['ю', 'iu'],
- ['я', 'ia'],
- ['\'', ''],
- ];
+ yield ['А', 'A'];
+ yield ['Б', 'B'];
+ yield ['В', 'V'];
+ yield ['Г', 'H'];
+ yield ['Ґ', 'G'];
+ yield ['Д', 'D'];
+ yield ['Е', 'E'];
+ yield ['Є', 'Ye'];
+ yield ['Ж', 'Zh'];
+ yield ['З', 'Z'];
+ yield ['И', 'Y'];
+ yield ['І', 'I'];
+ yield ['Ї', 'Yi'];
+ yield ['Й', 'Y'];
+ yield ['К', 'K'];
+ yield ['Л', 'L'];
+ yield ['М', 'M'];
+ yield ['Н', 'N'];
+ yield ['О', 'O'];
+ yield ['П', 'P'];
+ yield ['Р', 'R'];
+ yield ['С', 'S'];
+ yield ['Т', 'T'];
+ yield ['У', 'U'];
+ yield ['Ф', 'F'];
+ yield ['Х', 'Kh'];
+ yield ['Ц', 'Ts'];
+ yield ['Ч', 'Ch'];
+ yield ['Ш', 'Sh'];
+ yield ['Щ', 'Shch'];
+ yield ['Ю', 'Yu'];
+ yield ['Я', 'Ya'];
+ yield ['а', 'a'];
+ yield ['б', 'b'];
+ yield ['в', 'v'];
+ yield ['г', 'h'];
+ yield ['ґ', 'g'];
+ yield ['д', 'd'];
+ yield ['е', 'e'];
+ yield ['є', 'ie'];
+ yield ['ж', 'zh'];
+ yield ['з', 'z'];
+ yield ['и', 'y'];
+ yield ['і', 'i'];
+ yield ['ї', 'i'];
+ yield ['й', 'i'];
+ yield ['к', 'k'];
+ yield ['л', 'l'];
+ yield ['м', 'm'];
+ yield ['н', 'n'];
+ yield ['о', 'o'];
+ yield ['п', 'p'];
+ yield ['р', 'r'];
+ yield ['с', 's'];
+ yield ['т', 't'];
+ yield ['у', 'u'];
+ yield ['ф', 'f'];
+ yield ['х', 'kh'];
+ yield ['ц', 'ts'];
+ yield ['ч', 'ch'];
+ yield ['ш', 'sh'];
+ yield ['щ', 'shch'];
+ yield ['ь', ''];
+ yield ['ю', 'iu'];
+ yield ['я', 'ia'];
+ yield ['\'', ''];
}
- public function officialExamplesProvider(): array
+ public function officialExamplesProvider(): iterable
{
// Examples of transliteration form the resolution of the Cabinet of Ministers of Ukraine №55 (27.01.2010)
- return [
- // Аа
- ['Алушта', 'Alushta'],
- ['Андрій', 'Andrii'],
- // Бб
- ['Борщагівка', 'Borshchahivka'],
- ['Борисенко', 'Borysenko'],
- // Вв
- ['Вінниця', 'Vinnytsia'],
- ['Володимир', 'Volodymyr'],
- // Гг
- ['Гадяч', 'Hadiach'],
- ['Богдан', 'Bohdan'],
- ['Згурський', 'Zghurskyi'],
- // Ґґ
- ['Ґалаґан', 'Galagan'],
- ['Ґорґани', 'Gorgany'],
- // Дд
- ['Донецьк', 'Donetsk'],
- ['Дмитро', 'Dmytro'],
- // Ее
- ['Рівне', 'Rivne'],
- ['Олег', 'Oleh'],
- ['Есмань', 'Esman'],
- // Єє
- ['Єнакієве', 'Yenakiieve'],
- ['Гаєвич', 'Haievych'],
- ['Короп\'є', 'Koropie'],
- // Жж
- ['Житомир', 'Zhytomyr'],
- ['Жанна', 'Zhanna'],
- ['Жежелів', 'Zhezheliv'],
- // Зз
- ['Закарпаття', 'Zakarpattia'],
- ['Казимирчук', 'Kazymyrchuk'],
- // Ии
- ['Медвин', 'Medvyn'],
- ['Михайленко', 'Mykhailenko'],
- // Іі
- ['Іванків', 'Ivankiv'],
- ['Іващенко', 'Ivashchenko'],
- // Її
- ['Їжакевич', 'Yizhakevych'],
- ['Кадиївка', 'Kadyivka'],
- ['Мар\'їне', 'Marine'],
- // Йй
- ['Йосипівка', 'Yosypivka'],
- ['Стрий', 'Stryi'],
- ['Олексій', 'Oleksii'],
- // Кк
- ['Київ', 'Kyiv'],
- ['Коваленко', 'Kovalenko'],
- // Лл
- ['Лебедин', 'Lebedyn'],
- ['Леонід', 'Leonid'],
- // Мм
- ['Миколаїв', 'Mykolaiv'],
- ['Маринич', 'Marynych'],
- // Нн
- ['Ніжин', 'Nizhyn'],
- ['Наталія', 'Nataliia'],
- // Оо
- ['Одеса', 'Odesa'],
- ['Онищенко', 'Onyshchenko'],
- // Пп
- ['Полтава', 'Poltava'],
- ['Петро', 'Petro'],
- // Рр
- ['Решетилівка', 'Reshetylivka'],
- ['Рибчинський', 'Rybchynskyi'],
- // Сс
- ['Суми', 'Sumy'],
- ['Соломія', 'Solomiia'],
- // Тт
- ['Тернопіль', 'Ternopil'],
- ['Троць', 'Trots'],
- // Уу
- ['Ужгород', 'Uzhhorod'],
- ['Уляна', 'Uliana'],
- // Фф
- ['Фастів', 'Fastiv'],
- ['Філіпчук', 'Filipchuk'],
- // Хх
- ['Харків', 'Kharkiv'],
- ['Христина', 'Khrystyna'],
- // Цц
- ['Біла Церква', 'Bila Tserkva'],
- ['Стеценко', 'Stetsenko'],
- // Чч
- ['Чернівці', 'Chernivtsi'],
- ['Шевченко', 'Shevchenko'],
- // Шш
- ['Шостка', 'Shostka'],
- ['Кишеньки', 'Kyshenky'],
- // Щщ
- ['Щербухи', 'Shcherbukhy'],
- ['Гоща', 'Hoshcha'],
- ['Гаращенко', 'Harashchenko'],
- // Юю
- ['Юрій', 'Yurii'],
- ['Корюківка', 'Koriukivka'],
- // Яя
- ['Яготин', 'Yahotyn'],
- ['Ярошенко', 'Yaroshenko'],
- ['Костянтин', 'Kostiantyn'],
- ['Знам\'янка', 'Znamianka'],
- ['Феодосія', 'Feodosiia'],
- // Some text
- ['Добрий день', 'Dobryi den'],
- ['Привіт світ!', 'Pryvit svit!'],
- ];
+ // Аа
+ yield ['Алушта', 'Alushta'];
+ yield ['Андрій', 'Andrii'];
+ // Бб
+ yield ['Борщагівка', 'Borshchahivka'];
+ yield ['Борисенко', 'Borysenko'];
+ // Вв
+ yield ['Вінниця', 'Vinnytsia'];
+ yield ['Володимир', 'Volodymyr'];
+ // Гг
+ yield ['Гадяч', 'Hadiach'];
+ yield ['Богдан', 'Bohdan'];
+ yield ['Згурський', 'Zghurskyi'];
+ // Ґґ
+ yield ['Ґалаґан', 'Galagan'];
+ yield ['Ґорґани', 'Gorgany'];
+ // Дд
+ yield ['Донецьк', 'Donetsk'];
+ yield ['Дмитро', 'Dmytro'];
+ // Ее
+ yield ['Рівне', 'Rivne'];
+ yield ['Олег', 'Oleh'];
+ yield ['Есмань', 'Esman'];
+ // Єє
+ yield ['Єнакієве', 'Yenakiieve'];
+ yield ['Гаєвич', 'Haievych'];
+ yield ['Короп\'є', 'Koropie'];
+ // Жж
+ yield ['Житомир', 'Zhytomyr'];
+ yield ['Жанна', 'Zhanna'];
+ yield ['Жежелів', 'Zhezheliv'];
+ // Зз
+ yield ['Закарпаття', 'Zakarpattia'];
+ yield ['Казимирчук', 'Kazymyrchuk'];
+ // Ии
+ yield ['Медвин', 'Medvyn'];
+ yield ['Михайленко', 'Mykhailenko'];
+ // Іі
+ yield ['Іванків', 'Ivankiv'];
+ yield ['Іващенко', 'Ivashchenko'];
+ // Її
+ yield ['Їжакевич', 'Yizhakevych'];
+ yield ['Кадиївка', 'Kadyivka'];
+ yield ['Мар\'їне', 'Marine'];
+ // Йй
+ yield ['Йосипівка', 'Yosypivka'];
+ yield ['Стрий', 'Stryi'];
+ yield ['Олексій', 'Oleksii'];
+ // Кк
+ yield ['Київ', 'Kyiv'];
+ yield ['Коваленко', 'Kovalenko'];
+ // Лл
+ yield ['Лебедин', 'Lebedyn'];
+ yield ['Леонід', 'Leonid'];
+ // Мм
+ yield ['Миколаїв', 'Mykolaiv'];
+ yield ['Маринич', 'Marynych'];
+ // Нн
+ yield ['Ніжин', 'Nizhyn'];
+ yield ['Наталія', 'Nataliia'];
+ // Оо
+ yield ['Одеса', 'Odesa'];
+ yield ['Онищенко', 'Onyshchenko'];
+ // Пп
+ yield ['Полтава', 'Poltava'];
+ yield ['Петро', 'Petro'];
+ // Рр
+ yield ['Решетилівка', 'Reshetylivka'];
+ yield ['Рибчинський', 'Rybchynskyi'];
+ // Сс
+ yield ['Суми', 'Sumy'];
+ yield ['Соломія', 'Solomiia'];
+ // Тт
+ yield ['Тернопіль', 'Ternopil'];
+ yield ['Троць', 'Trots'];
+ // Уу
+ yield ['Ужгород', 'Uzhhorod'];
+ yield ['Уляна', 'Uliana'];
+ // Фф
+ yield ['Фастів', 'Fastiv'];
+ yield ['Філіпчук', 'Filipchuk'];
+ // Хх
+ yield ['Харків', 'Kharkiv'];
+ yield ['Христина', 'Khrystyna'];
+ // Цц
+ yield ['Біла Церква', 'Bila Tserkva'];
+ yield ['Стеценко', 'Stetsenko'];
+ // Чч
+ yield ['Чернівці', 'Chernivtsi'];
+ yield ['Шевченко', 'Shevchenko'];
+ // Шш
+ yield ['Шостка', 'Shostka'];
+ yield ['Кишеньки', 'Kyshenky'];
+ // Щщ
+ yield ['Щербухи', 'Shcherbukhy'];
+ yield ['Гоща', 'Hoshcha'];
+ yield ['Гаращенко', 'Harashchenko'];
+ // Юю
+ yield ['Юрій', 'Yurii'];
+ yield ['Корюківка', 'Koriukivka'];
+ // Яя
+ yield ['Яготин', 'Yahotyn'];
+ yield ['Ярошенко', 'Yaroshenko'];
+ yield ['Костянтин', 'Kostiantyn'];
+ yield ['Знам\'янка', 'Znamianka'];
+ yield ['Феодосія', 'Feodosiia'];
+ // Some text
+ yield ['Добрий день', 'Dobryi den'];
+ yield ['Привіт світ!', 'Pryvit svit!'];
}
- public function sentencesProvider(): array
+ public function sentencesProvider(): iterable
{
- return [
- ['Добрий день', 'Dobryi den'],
- ['Привіт світ!', 'Pryvit svit!'],
- ];
+ yield ['Добрий день', 'Dobryi den'];
+ yield ['Привіт світ!', 'Pryvit svit!'];
}
}