#!perl

use strict;
use warnings;

use Test::More;
use Test::BDD::Cucumber::Parser;

my $feature_with_background = <<'HEREDOC'
@inherited1 @inherited2
Feature: Test Feature
	Conditions of satisfaction

	Background:
		Given a passing step called 'background-foo'
		Given a background step that sometimes passes

	@foo @bar
	Scenario: Two tags
		Given a passing step called 'bar'
		Given a passing step called 'baz'

	@baz
	Scenario: One tag
		Given a passing step called 'bar'
		Given a passing step called '<name>'
		Examples:
		  | name |
		  | bat  |
		  | ban  |
		  | fan  |
HEREDOC
;

my $feature_without_background = $feature_with_background;
$feature_without_background =~ s/\tBackground.+?\n\n//s;

for (
	[ "Feature with background section", $feature_with_background ],
	[ "Feature without background section", $feature_without_background ],
) {
	my ( $name, $feature_text ) = @$_;
	note( $name );

	my $feature = Test::BDD::Cucumber::Parser->parse_string( $feature_text );

	my @scenarios = @{ $feature->scenarios };
	is( @scenarios, 2, "Found two scenarios" );

	my $tags_match = sub {
		my ( $scenario, @expected_tags ) = @_;
		my @found_tags = sort @{$scenario->tags};
		is_deeply( \@found_tags, [sort @expected_tags],
			"Tags match for " . $scenario->name );
	};

	$tags_match->( $feature,      qw/inherited1 inherited2         / );
	$tags_match->( $scenarios[0], qw/inherited1 inherited2 foo bar / );
	$tags_match->( $scenarios[1], qw/inherited1 inherited2 baz     / );
}

done_testing();
