Security update for permissions_by_term
[yaffs-website] / vendor / behat / gherkin / tests / Behat / Gherkin / ParserTest.php
diff --git a/vendor/behat/gherkin/tests/Behat/Gherkin/ParserTest.php b/vendor/behat/gherkin/tests/Behat/Gherkin/ParserTest.php
new file mode 100644 (file)
index 0000000..aff585c
--- /dev/null
@@ -0,0 +1,147 @@
+<?php
+
+namespace Tests\Behat\Gherkin;
+
+use Behat\Gherkin\Node\FeatureNode;
+use Behat\Gherkin\Lexer;
+use Behat\Gherkin\Parser;
+use Behat\Gherkin\Keywords\ArrayKeywords;
+use Behat\Gherkin\Loader\YamlFileLoader;
+
+class ParserTest extends \PHPUnit_Framework_TestCase
+{
+    private $gherkin;
+    private $yaml;
+
+    public function parserTestDataProvider()
+    {
+        $data = array();
+
+        foreach (glob(__DIR__ . '/Fixtures/etalons/*.yml') as $file) {
+            $testname = basename($file, '.yml');
+
+            $data[] = array($testname);
+        }
+
+        return $data;
+    }
+
+    /**
+     * @dataProvider parserTestDataProvider
+     *
+     * @param string $fixtureName name of the fixture
+     */
+    public function testParser($fixtureName)
+    {
+        $etalon = $this->parseEtalon($fixtureName . '.yml');
+        $features = $this->parseFixture($fixtureName . '.feature');
+
+        $this->assertInternalType('array', $features);
+        $this->assertEquals(1, count($features));
+        $fixture = $features[0];
+
+        $this->assertEquals($etalon, $fixture);
+    }
+
+    public function testParserResetsTagsBetweenFeatures()
+    {
+        $parser = $this->getGherkinParser();
+
+        $parser->parse(<<<FEATURE
+Feature:
+Scenario:
+Given step
+@skipped
+FEATURE
+        );
+        $feature2 = $parser->parse(<<<FEATURE
+Feature:
+Scenario:
+Given step
+FEATURE
+        );
+
+        $this->assertFalse($feature2->hasTags());
+    }
+
+    protected function getGherkinParser()
+    {
+        if (null === $this->gherkin) {
+            $keywords       = new ArrayKeywords(array(
+                'en' => array(
+                    'feature'          => 'Feature',
+                    'background'       => 'Background',
+                    'scenario'         => 'Scenario',
+                    'scenario_outline' => 'Scenario Outline',
+                    'examples'         => 'Examples',
+                    'given'            => 'Given',
+                    'when'             => 'When',
+                    'then'             => 'Then',
+                    'and'              => 'And',
+                    'but'              => 'But'
+                ),
+                'ru' => array(
+                    'feature'          => 'Функционал',
+                    'background'       => 'Предыстория',
+                    'scenario'         => 'Сценарий',
+                    'scenario_outline' => 'Структура сценария',
+                    'examples'         => 'Значения',
+                    'given'            => 'Допустим',
+                    'when'             => 'То',
+                    'then'             => 'Если',
+                    'and'              => 'И',
+                    'but'              => 'Но'
+                ),
+                'ja' => array (
+                    'feature'           => 'フィーチャ',
+                    'background'        => '背景',
+                    'scenario'          => 'シナリオ',
+                    'scenario_outline'  => 'シナリオアウトライン',
+                    'examples'          => '例|サンプル',
+                    'given'             => '前提<',
+                    'when'              => 'もし<',
+                    'then'              => 'ならば<',
+                    'and'               => 'かつ<',
+                    'but'               => 'しかし<'
+                )
+            ));
+            $this->gherkin  = new Parser(new Lexer($keywords));
+        }
+
+        return $this->gherkin;
+    }
+
+    protected function getYamlParser()
+    {
+        if (null === $this->yaml) {
+            $this->yaml = new YamlFileLoader();
+        }
+
+        return $this->yaml;
+    }
+
+    protected function parseFixture($fixture)
+    {
+        $file = __DIR__ . '/Fixtures/features/' . $fixture;
+
+        return array($this->getGherkinParser()->parse(file_get_contents($file), $file));
+    }
+
+    protected function parseEtalon($etalon)
+    {
+        $features = $this->getYamlParser()->load(__DIR__ . '/Fixtures/etalons/' . $etalon);
+        $feature  = $features[0];
+
+        return new FeatureNode(
+            $feature->getTitle(),
+            $feature->getDescription(),
+            $feature->getTags(),
+            $feature->getBackground(),
+            $feature->getScenarios(),
+            $feature->getKeyword(),
+            $feature->getLanguage(),
+            __DIR__ . '/Fixtures/features/' . basename($etalon, '.yml') . '.feature',
+            $feature->getLine()
+        );
+    }
+}