--- /dev/null
+<?php
+
+namespace Tests\Behat\Gherkin\Filter;
+
+use Behat\Gherkin\Filter\LineRangeFilter;
+use Behat\Gherkin\Node\ExampleTableNode;
+use Behat\Gherkin\Node\FeatureNode;
+use Behat\Gherkin\Node\OutlineNode;
+use Behat\Gherkin\Node\ScenarioNode;
+
+class LineRangeFilterTest extends FilterTest
+{
+ public function featureLineRangeProvider()
+ {
+ return array(
+ array('1', '1', true),
+ array('1', '2', true),
+ array('1', '*', true),
+ array('2', '2', false),
+ array('2', '*', false)
+ );
+ }
+
+ /**
+ * @dataProvider featureLineRangeProvider
+ */
+ public function testIsFeatureMatchFilter($filterMinLine, $filterMaxLine, $expected)
+ {
+ $feature = new FeatureNode(null, null, array(), null, array(), null, null, null, 1);
+
+ $filter = new LineRangeFilter($filterMinLine, $filterMaxLine);
+ $this->assertSame($expected, $filter->isFeatureMatch($feature));
+ }
+
+ public function scenarioLineRangeProvider()
+ {
+ return array(
+ array('1', '2', 1),
+ array('1', '*', 2),
+ array('2', '2', 1),
+ array('2', '*', 2),
+ array('3', '3', 1),
+ array('3', '*', 1),
+ array('1', '1', 0),
+ array('4', '4', 0),
+ array('4', '*', 0)
+ );
+ }
+
+ /**
+ * @dataProvider scenarioLineRangeProvider
+ */
+ public function testIsScenarioMatchFilter($filterMinLine, $filterMaxLine, $expectedNumberOfMatches)
+ {
+ $scenario = new ScenarioNode(null, array(), array(), null, 2);
+ $outline = new OutlineNode(null, array(), array(), new ExampleTableNode(array(), null), null, 3);
+
+ $filter = new LineRangeFilter($filterMinLine, $filterMaxLine);
+ $this->assertEquals(
+ $expectedNumberOfMatches,
+ intval($filter->isScenarioMatch($scenario)) + intval($filter->isScenarioMatch($outline))
+ );
+ }
+
+ public function testFilterFeatureScenario()
+ {
+ $filter = new LineRangeFilter(1, 3);
+ $feature = $filter->filterFeature($this->getParsedFeature());
+ $this->assertCount(1, $scenarios = $feature->getScenarios());
+ $this->assertSame('Scenario#1', $scenarios[0]->getTitle());
+
+ $filter = new LineRangeFilter(5, 9);
+ $feature = $filter->filterFeature($this->getParsedFeature());
+ $this->assertCount(1, $scenarios = $feature->getScenarios());
+ $this->assertSame('Scenario#2', $scenarios[0]->getTitle());
+
+ $filter = new LineRangeFilter(5, 6);
+ $feature = $filter->filterFeature($this->getParsedFeature());
+ $this->assertCount(0, $scenarios = $feature->getScenarios());
+ }
+
+ public function testFilterFeatureOutline()
+ {
+ $filter = new LineRangeFilter(12, 14);
+ $feature = $filter->filterFeature($this->getParsedFeature());
+ $this->assertCount(1, $scenarios = $feature->getScenarios());
+ $this->assertSame('Scenario#3', $scenarios[0]->getTitle());
+ $this->assertCount(1, $scenarios[0]->getExampleTable()->getRows());
+
+ $filter = new LineRangeFilter(15, 20);
+ $feature = $filter->filterFeature($this->getParsedFeature());
+ $this->assertCount(1, $scenarios = $feature->getScenarios());
+ $this->assertSame('Scenario#3', $scenarios[0]->getTitle());
+ $this->assertCount(3, $scenarios[0]->getExampleTable()->getRows());
+ $this->assertSame(array(
+ array('action', 'outcome'),
+ array('act#1', 'out#1'),
+ array('act#2', 'out#2'),
+ ), $scenarios[0]->getExampleTable()->getRows());
+ }
+}