--- /dev/null
+<?php
+
+namespace Tests\Behat\Gherkin\Keywords;
+
+use Behat\Gherkin\Keywords\ArrayKeywords;
+use Behat\Gherkin\Keywords\KeywordsDumper;
+
+class KeywordsDumperTest extends \PHPUnit_Framework_TestCase
+{
+ private $keywords;
+
+ protected function setUp()
+ {
+ $this->keywords = new ArrayKeywords(array(
+ 'en' => array(
+ 'feature' => 'Feature',
+ 'background' => 'Background',
+ 'scenario' => 'Scenario',
+ 'scenario_outline' => 'Scenario Outline|Scenario Template',
+ 'examples' => 'Examples|Scenarios',
+ 'given' => 'Given',
+ 'when' => 'When',
+ 'then' => 'Then',
+ 'and' => 'And',
+ 'but' => 'But'
+ ),
+ 'ru' => array(
+ 'feature' => 'Функционал|Фича',
+ 'background' => 'Предыстория|Бэкграунд',
+ 'scenario' => 'Сценарий|История',
+ 'scenario_outline' => 'Структура сценария|Аутлайн',
+ 'examples' => 'Значения',
+ 'given' => 'Допустим',
+ 'when' => 'Если|@',
+ 'then' => 'То',
+ 'and' => 'И',
+ 'but' => 'Но'
+ )
+ ));
+ }
+
+ public function testEnKeywordsDumper()
+ {
+ $dumper = new KeywordsDumper($this->keywords);
+
+ $dumped = $dumper->dump('en');
+ $etalon = <<<GHERKIN
+Feature: Internal operations
+ In order to stay secret
+ As a secret organization
+ We need to be able to erase past agents' memory
+
+ Background:
+ Given there is agent A
+ And there is agent B
+
+ Scenario: Erasing agent memory
+ Given there is agent J
+ And there is agent K
+ When I erase agent K's memory
+ Then there should be agent J
+ But there should not be agent K
+
+ (Scenario Outline|Scenario Template): Erasing other agents' memory
+ Given there is agent <agent1>
+ And there is agent <agent2>
+ When I erase agent <agent2>'s memory
+ Then there should be agent <agent1>
+ But there should not be agent <agent2>
+
+ (Examples|Scenarios):
+ | agent1 | agent2 |
+ | D | M |
+GHERKIN;
+
+ $this->assertEquals($etalon, $dumped);
+ }
+
+ public function testRuKeywordsDumper()
+ {
+ $dumper = new KeywordsDumper($this->keywords);
+
+ $dumped = $dumper->dump('ru');
+ $etalon = <<<GHERKIN
+# language: ru
+(Функционал|Фича): Internal operations
+ In order to stay secret
+ As a secret organization
+ We need to be able to erase past agents' memory
+
+ (Предыстория|Бэкграунд):
+ Допустим there is agent A
+ И there is agent B
+
+ (Сценарий|История): Erasing agent memory
+ Допустим there is agent J
+ И there is agent K
+ (Если|@) I erase agent K's memory
+ То there should be agent J
+ Но there should not be agent K
+
+ (Структура сценария|Аутлайн): Erasing other agents' memory
+ Допустим there is agent <agent1>
+ И there is agent <agent2>
+ (Если|@) I erase agent <agent2>'s memory
+ То there should be agent <agent1>
+ Но there should not be agent <agent2>
+
+ Значения:
+ | agent1 | agent2 |
+ | D | M |
+GHERKIN;
+
+ $this->assertEquals($etalon, $dumped);
+ }
+
+ public function testRuKeywordsCustomKeywordsDumper()
+ {
+ $dumper = new KeywordsDumper($this->keywords);
+ $dumper->setKeywordsDumperFunction(function ($keywords) {
+ return '<keyword>'.implode(', ', $keywords).'</keyword>';
+ });
+
+ $dumped = $dumper->dump('ru');
+ $etalon = <<<GHERKIN
+# language: ru
+<keyword>Функционал, Фича</keyword>: Internal operations
+ In order to stay secret
+ As a secret organization
+ We need to be able to erase past agents' memory
+
+ <keyword>Предыстория, Бэкграунд</keyword>:
+ <keyword>Допустим</keyword> there is agent A
+ <keyword>И</keyword> there is agent B
+
+ <keyword>Сценарий, История</keyword>: Erasing agent memory
+ <keyword>Допустим</keyword> there is agent J
+ <keyword>И</keyword> there is agent K
+ <keyword>Если, @</keyword> I erase agent K's memory
+ <keyword>То</keyword> there should be agent J
+ <keyword>Но</keyword> there should not be agent K
+
+ <keyword>Структура сценария, Аутлайн</keyword>: Erasing other agents' memory
+ <keyword>Допустим</keyword> there is agent <agent1>
+ <keyword>И</keyword> there is agent <agent2>
+ <keyword>Если, @</keyword> I erase agent <agent2>'s memory
+ <keyword>То</keyword> there should be agent <agent1>
+ <keyword>Но</keyword> there should not be agent <agent2>
+
+ <keyword>Значения</keyword>:
+ | agent1 | agent2 |
+ | D | M |
+GHERKIN;
+
+ $this->assertEquals($etalon, $dumped);
+ }
+
+ public function testExtendedVersionDumper()
+ {
+ $dumper = new KeywordsDumper($this->keywords);
+
+ $dumped = $dumper->dump('ru', false);
+ $etalon = array(
+ <<<GHERKIN
+# language: ru
+Функционал: Internal operations
+ In order to stay secret
+ As a secret organization
+ We need to be able to erase past agents' memory
+
+ Предыстория:
+ Допустим there is agent A
+ И there is agent B
+
+ Сценарий: Erasing agent memory
+ Допустим there is agent J
+ И there is agent K
+ Если I erase agent K's memory
+ @ I erase agent K's memory
+ То there should be agent J
+ Но there should not be agent K
+
+ История: Erasing agent memory
+ Допустим there is agent J
+ И there is agent K
+ Если I erase agent K's memory
+ @ I erase agent K's memory
+ То there should be agent J
+ Но there should not be agent K
+
+ Структура сценария: Erasing other agents' memory
+ Допустим there is agent <agent1>
+ И there is agent <agent2>
+ Если I erase agent <agent2>'s memory
+ @ I erase agent <agent2>'s memory
+ То there should be agent <agent1>
+ Но there should not be agent <agent2>
+
+ Значения:
+ | agent1 | agent2 |
+ | D | M |
+
+ Аутлайн: Erasing other agents' memory
+ Допустим there is agent <agent1>
+ И there is agent <agent2>
+ Если I erase agent <agent2>'s memory
+ @ I erase agent <agent2>'s memory
+ То there should be agent <agent1>
+ Но there should not be agent <agent2>
+
+ Значения:
+ | agent1 | agent2 |
+ | D | M |
+GHERKIN
+ , <<<GHERKIN
+# language: ru
+Фича: Internal operations
+ In order to stay secret
+ As a secret organization
+ We need to be able to erase past agents' memory
+
+ Предыстория:
+ Допустим there is agent A
+ И there is agent B
+
+ Сценарий: Erasing agent memory
+ Допустим there is agent J
+ И there is agent K
+ Если I erase agent K's memory
+ @ I erase agent K's memory
+ То there should be agent J
+ Но there should not be agent K
+
+ История: Erasing agent memory
+ Допустим there is agent J
+ И there is agent K
+ Если I erase agent K's memory
+ @ I erase agent K's memory
+ То there should be agent J
+ Но there should not be agent K
+
+ Структура сценария: Erasing other agents' memory
+ Допустим there is agent <agent1>
+ И there is agent <agent2>
+ Если I erase agent <agent2>'s memory
+ @ I erase agent <agent2>'s memory
+ То there should be agent <agent1>
+ Но there should not be agent <agent2>
+
+ Значения:
+ | agent1 | agent2 |
+ | D | M |
+
+ Аутлайн: Erasing other agents' memory
+ Допустим there is agent <agent1>
+ И there is agent <agent2>
+ Если I erase agent <agent2>'s memory
+ @ I erase agent <agent2>'s memory
+ То there should be agent <agent1>
+ Но there should not be agent <agent2>
+
+ Значения:
+ | agent1 | agent2 |
+ | D | M |
+GHERKIN
+ );
+
+ $this->assertEquals($etalon, $dumped);
+ }
+}