--- /dev/null
+<?php
+
+/*
+ * This file is part of the Behat Gherkin.
+ * (c) Konstantin Kudryashov <ever.zet@gmail.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Behat\Gherkin\Node;
+
+/**
+ * Represents Gherkin Scenario.
+ *
+ * @author Konstantin Kudryashov <ever.zet@gmail.com>
+ */
+class ScenarioNode implements ScenarioInterface
+{
+ /**
+ * @var string
+ */
+ private $title;
+ /**
+ * @var array
+ */
+ private $tags = array();
+ /**
+ * @var StepNode[]
+ */
+ private $steps = array();
+ /**
+ * @var string
+ */
+ private $keyword;
+ /**
+ * @var integer
+ */
+ private $line;
+
+ /**
+ * Initializes scenario.
+ *
+ * @param null|string $title
+ * @param array $tags
+ * @param StepNode[] $steps
+ * @param string $keyword
+ * @param integer $line
+ */
+ public function __construct($title, array $tags, array $steps, $keyword, $line)
+ {
+ $this->title = $title;
+ $this->tags = $tags;
+ $this->steps = $steps;
+ $this->keyword = $keyword;
+ $this->line = $line;
+ }
+
+ /**
+ * Returns node type string
+ *
+ * @return string
+ */
+ public function getNodeType()
+ {
+ return 'Scenario';
+ }
+
+ /**
+ * Returns scenario title.
+ *
+ * @return null|string
+ */
+ public function getTitle()
+ {
+ return $this->title;
+ }
+
+ /**
+ * Checks if scenario is tagged with tag.
+ *
+ * @param string $tag
+ *
+ * @return Boolean
+ */
+ public function hasTag($tag)
+ {
+ return in_array($tag, $this->getTags());
+ }
+
+ /**
+ * Checks if scenario has tags (both inherited from feature and own).
+ *
+ * @return Boolean
+ */
+ public function hasTags()
+ {
+ return 0 < count($this->getTags());
+ }
+
+ /**
+ * Returns scenario tags (including inherited from feature).
+ *
+ * @return array
+ */
+ public function getTags()
+ {
+ return $this->tags;
+ }
+
+ /**
+ * Checks if scenario has steps.
+ *
+ * @return Boolean
+ */
+ public function hasSteps()
+ {
+ return 0 < count($this->steps);
+ }
+
+ /**
+ * Returns scenario steps.
+ *
+ * @return StepNode[]
+ */
+ public function getSteps()
+ {
+ return $this->steps;
+ }
+
+ /**
+ * Returns scenario keyword.
+ *
+ * @return string
+ */
+ public function getKeyword()
+ {
+ return $this->keyword;
+ }
+
+ /**
+ * Returns scenario declaration line number.
+ *
+ * @return integer
+ */
+ public function getLine()
+ {
+ return $this->line;
+ }
+}